✔️ 本記事の内容
本記事ではPyAutoGUIを使った自動化について解説しています。
PyAutoGUIを使えば、簡単にマウス操作などを自動化できます。
自分で実際に動かしながら、読み進めていただくと理解が早いと思います。
PyAutoGUIとは
PyAutoGUIは、Pythonのライブラリで、GUI(グラフィカルユーザーインターフェース)の操作を自動化できます。
例としては、マウス操作やキーボード操作などがあり、カーソルを移動させたり、クリックしたり、文字を入力したりと様々なことが出来ます。
ちなみにですが、筆者はこの機能を使用し、会社の勤怠入力など単純でつまらない作業をなくして、有意義な時間を過ごしております。
インストールについて
インストールはpipを使用することで、以下のコマンドで出来ます。
#PyAutoGUIのインストール pip install pyautogui
PC画面上の座標について
PyAutoGUIを使用するにあたって、画面上の座標について理解しておく必要があります。
以下の画像のように、画面上の座標は左上を原点とし、右向きにx軸、下向きにy軸という座標系になってます。
初めは慣れないかもしれませんが、画像など他にも同様の座標系を取るものもありますので、これを機に慣れていきましょう!
PyAutoGUIによるマウス操作
先に今回紹介するマウス操作のメソッドをまとめておきます。
- カーソル移動 – moveTo
- クリック – click
- スクロール – scroll
マウス操作についてより詳しく知りたい方は以下の記事を参考にしてください。
moveTo
moveToはカーソル移動のメソッドです。
第1引数にx座標、第2引数にy座標を渡すことで、画面内の指定した場所まで移動します。
import pyautogui as gui # x=200,y=100の位置に移動 gui.moveTo(200,100)
第3引数には移動時間 (Duration) を与えることが出来ます。移動時間を指定することで、人間味のある動きになりますね。また、どのように動いているか知りたければ、移動時間を1秒くらいに設定することで確認できます。
(※設定時間がpyautogui.MINIMUM_DURATION
より小さい場合、動きは瞬時に行われます。デフォルトでは0.1です。代入することで変更可能です。)
# x=100,y=200の位置に2秒かけて移動 gui.moveTo(100,200,2)
click
clickは文字通りクリックができるメソッドになります。
第1引数にx座標、第2引数にy座標を渡すことで、画面内の指定した場所をクリックします。
(引数がなければ、その場でクリックします。)
#x=200,y=100の位置を左クリック gui.click(200,100) #その場をクリック gui.click()
クリックするマウスボタンを指定するには、button
キーワード引数に'left''middle'
、または'right'
を渡します。
複数回クリックするには、clicks
キーワード引数に整数を渡します。また、interval
キーワード引数にfloatを渡すことで、クリック間隔を指定できます。
#0.5秒間隔で左クリックを2回行う gui.click(button='left', clicks=2, interval=0.5)
scroll
scrollは文字通りスクロールができるメソッドになります。
第1引数に整数を渡すことで、その数だけスクロールをします。
1回のスクロール量はプラットフォームにより異なるので、注意が必要です。
#5回スクロールする gui.scroll(5)
また、x,yのキーワード引数に座標を渡すことで、指定した場所に移動してからスクロールできます。
#x=300,y=200に移動後、10回スクロールする gui.scroll(10,x=300, y=200)
PyAutoGUIによるキーボード操作
先に今回紹介する2つのキーボード操作メソッドをまとめておきます。
- 文字入力 – write
- キー入力 – press
キーボード操作についてより詳しく知りたい方は以下の記事を参考にしてください。
write
writeは文字入力のメソッドです。
引数に文字列を渡すことで、カーソルで指定した位置に文字列を入力します。
#Hello worldと文字入力 pyautogui.write('Hello world')
interval
キーワード引数にfloatを渡すことで、入力間隔を調整できます。この値を0.25くらいに設定すると、まるで人間が入力しているように見えます。
#1文字0.25秒間隔でHello worldと文字入力 pyautogui.write('Hello world', interval=0.25)
press
pressはキー入力のメソッドです。
引数にキーの種類を指定することで、キー入力ができます。
使用できるキーは pyautogui.KEYBOARD_KEYSで確認できます。
#Enterキー入力 gui.press('enter') #Deleteキー入力 gui.press('del')
pyautogui.KEYBOARD_KEYSをターミナルで確認すると以下のようになります。
これら全てのキーが使えます。
PyAutoGUIによる自動化のメリット・デメリット
メリット
PyAutoGUIによる自動化のメリットはなんと言っても汎用性が高いことです。
なぜ汎用性が高いと言えるのか、それは人がマウス操作を介してPCを操作するため、ほとんどの場面で適用できるからです。
前述したseleniumやlinuxコマンドを駆使して、画面に表示させることさえできれば、ブラウザに限らず、様々なアプリケーション等で使用可能です。
また、PyAutoGUIのカーソル操作はかなり簡単に実装できるので、初心者の方だけでなく未経験の方にもおすすめです!
デメリット
マウス操作を軸にした自動化のデメリットは頑健性(ロバスト性)の低さです。
例えば、ブラウザ自動化のプログラムをChrome作った場合、そのプログラムはEdgeなど他のブラウザでそのまま使うことはできません。ブラウザごとに表示される位置が若干異なるため、再利用するには座標を調整する必要があります。もちろんChromeであっても、表示が少し変わるだけで座標の調整が必要です。
行数の少ない簡易なプログラムであれば、さほど問題にはなりませんが、調整箇所が多いとかなりの手間です。
こうした問題を解決するには、seleniumを使うのが良いでしょう。こちらはHTMLの要素を指定して処理するため、表示位置に関係なく機能します。
相性の良いライブラリ
- pyperclip
- time
pyperclip
RPAを進めていくとブラウザやExcelに日本語を入力したいときも出てきますが、PyAutoGUIのキーボード操作だけでは日本語の入力ができません。そんなときに重宝するのがpyperclipです。このライブラリではクリップボードを操作することができます。pyperclip.copyとpyautogui.hotkeyを使うことで日本語入力ができます。以下記事を参照ください。
time
PyAutoGUIの操作は画面に表示されていることが条件になります。しかし、ブラウザやアプリのラグによりタイミングが合わず、ボタンを押下できないことがあると思います。timeモジュールでは一時停止など、時間制御をすることが出来ます。これを活用することでRPAをスムーズに行うことが出来ます。