• トップ
  • ブログ一覧
  • 【Python】PyAutoGuiの画像認識で人間の操作を自動化(RPA)する
  • 【Python】PyAutoGuiの画像認識で人間の操作を自動化(RPA)する

    広告メディア事業部広告メディア事業部
    2020.07.07

    IT技術

    PyAutoGuiとは?

    「PyAutoGui」は、Python のモジュールの一つです。

    近年流行している RPA(Robotic Process Automation) の機能を、Python で実装することが可能になります。

    人間が操作しているのと同様に、マウス・キーボードの操作を画像認識と組み合わせて自動化することができます。

    うまく活用すると、繰り返しの単調な作業などを簡単に自動化させることができます。

    非常に魅力的なモジュールで使い方はアイデア次第で無限大の可能性があり、使い方も簡単です。

    本記事では、そんな「PyAutoGui」の使い方をご紹介したいと思います。

    PyAutoGuiの導入方法

    PyAutoGuiのインストール

    「PyAutoGui」は Python のモジュールなので、お馴染みの pip コマンドを使ってインストールします。

    1$ pip3 install pyautogui

    OpenCVのインストール

    画像認識の精度調節が可能になるため、「OpenCV」もインストールておきましょう。

    1$ pip3 install opencv_python

    プログラムでPyAutoGuiの読み込み

    上記2つをインストールした後は、プログラム内から以下のようにモジュールを読み込みます。

    1import pyautogui

    準備完了!

    これで、 PyAutoGui を利用する準備が整いました!

    次は、PyAutGui の使用方法を説明します。

    PyAutoGuiの使用上の注意

    PyAutoGuiの使用上の注意については、以下となります。

    操作不能を回避するために

    RPA で無限ループなど、問題のある状態でプログラムを実行してしまうと操作不能に陥ってしまうことがあります。

    そのため、PyAutoGui では緊急時にプログラムを停止させるために 「FailSafe 機能」が実装されています。

    FaleSafe機能を使うには

    PyAutoGui の「FaleSafe 機能」を使うためには、プログラム実行中にマウスカーソルを一番左上 (座標 0, 0) に移動させます。

    マウス操作を行うプログラムの場合、座標 (0, 0) へマウスを移動させることも難しくなることがあるので注意してください。

    画面遷移前に次の操作を実行させないために

    PCの処理はタイミングによってすぐに終わったり、時間がかかったり変動するものです。

    例えば、ボタンをクリックさせて画面遷移を伴う処理の場合、何も考えずに操作を順番に Python コードに実装したとします。

    すると、1回目のクリックの後に、画面遷移を待たずに次の処理をしてエラーになることがあります。

    そのため、画面遷移に必要な秒数を予め指定してウェイトさせるか、画像認識を利用して次の画面の画像が表示されるまでウェイトさせるような機能の実装が必要になります。

    今回の例で利用するPyAutoGuiの関数

    キーボードのキーを押下する(press)

    1pyautogui.press('キー名')

    キーボードで文字列を入力する(write)

    1pyautogui.write('文字列')

    画像を認識して座標を取得する(locateOnScreen)

    1pyaugotui.locateOnScreen('画像認識用のファイル名' , confidence=0.9)

    該当の画像が存在しない場合は、None を返します。

    また、confidence の値を1から下げていくことで、画像認識の曖昧マッチングが可能になります。

    これにより、画像認識用の画像ファイルを保存する際の劣化などに対応することができます。

    指定の座標でマウスの左クリックをする(click)

    1pyautogui.click(x='座標' , y='座標')

    キーボードを同時押しする(hotkey)

    1pyautogui.hotkey('一つ目のキー','二つ目のキー')

    「CTL + C」などのキーボードの同時押しを実現します。

    その他の関数

    他にも様々な機能がありますので、詳細なマニュアルについては以下のオフィシャルドキュメントを参照してください。

    【PyAutoGUI's documentation】
    https://pyautogui.readthedocs.io/en/latest/

    【実装例】PyAutGuiでExcel操作を自動化

    今回の実装例では、以下の様な処理を自動化してみます。

    • 1.Winキーを押下してExcelを起動
    • 2.新しいブックを作成
    • 3.セルに文字("Hello PyAutoGui")を入力
    • 4.ファイル名を付けて保存
    • 5.Excelの終了

    コード

    上記作業を 「Python + PyAutoGui」を使って自動化すると、以下のようになります。

    今回は、時間のかかる Excel の起動待機のみ、画像認識を使った処理待ちをさせています。

    その他の処理待ちは、time.sleep を使って決め打ちで処理させています。

    1import pyautogui as pgui
    2import time
    3
    4#キーボードのWinキーを押す
    5pgui.press('win')
    6#キーボードでexcelと入力
    7pgui.write('excel')
    8#画面が表示されるまで待機
    9time.sleep(1)
    10#キーボードのエンターを入力してEXCELを起動
    11pgui.press('enter')
    12#エクセルが起動するまで待機する。時間が読めないので、次の操作で使う画像の認識で判定
    13while pgui.locateOnScreen('empty_book.jpg' , confidence=0.9) is None:
    14    time.sleep(1)
    15#空白のブックアイコンの座標を取得
    16position=pgui.locateOnScreen('empty_book.jpg' , confidence=0.9)
    17#空白のブックアイコンをクリック
    18pgui.click(position)
    19#選択されているセルに任意の文字列を入力
    20pgui.write('Hello PyAutoGui')
    21#入力が完了するまで待機する
    22time.sleep(3)
    23#上書き保存のショートカットを入力
    24pgui.hotkey('ctrl','s')
    25#名前を付けて保存画面が表示されるのを待機する
    26time.sleep(3)
    27#このPCアイコンの座標を取得
    28position=pgui.locateOnScreen('this_pc.jpg' , confidence=0.9)
    29#このPCアイコンをクリック
    30pgui.click(position)
    31#画面遷移を待機する
    32time.sleep(1)
    33#キーボードのtabを3回押してファイル名入力のテキストボックスまで移動
    34pgui.press('tab',presses=3)
    35#キーボードでファイル名を入力
    36pgui.write('pytest')
    37#キーボードのエンターキーを押す
    38pgui.press('enter')
    39#キーボードのALT+F4を押してでExcel終了
    40pgui.hotkey('alt','f4')

    プログラムで使用している画像認識用のファイル

    1.empty_book.jpg

    2.this_pc.jpg

    実行してみましょう!


    こんな感じで動きました!

    面白いですね!

    さいごに

    「Python + PyAutoGui」の使い方はご理解いただけましたか?

    作れるものはアイディア次第で無限大です!

    例えば、ゲームのレベル上げのような繰り返し作業を自動化させることもできますし、業務での単純作業を効率化させることもできます。

    是非みなさんの回りにある単純作業を、Python で自動化して楽をしちゃいましょう!

    こちらの記事もオススメ!

    featureImg2020.07.30Python 特集実装編※最新記事順Responder + Firestore でモダンかつサーバーレスなブログシステムを作ってみた!P...

    featureImg2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...

    広告メディア事業部

    広告メディア事業部

    おすすめ記事