✔️ 本記事の内容
本記事では、PythonライブラリのPyAutoGUIによるマウス操作ついて解説しています。
対象は、Pythonでマウス操作したい方、単純な繰り返し作業を自動化したい方などです。
参考プログラムを載せてありますので、自分で実際に動かしてみましょう。
PyAutoGUIとは
PyAutoGUIは、Pythonのライブラリで、GUI(グラフィカルユーザーインターフェース)の操作を自動化できます。
例としては、マウス操作やキーボード操作などがあり、カーソルを移動させたり、クリックしたり、文字を入力したりと様々なことが出来ます。
ちなみにですが、筆者はこの機能を使用し、会社の勤怠入力など単純でつまらない作業を自動化し、有意義な時間を過ごしております。
PyAutoGUIについて大まかに知りたい方は以下の記事を参照ください。
インストールについて
インストールはpipを使用することで、以下のコマンドで出来ます。
#PyAutoGUIのインストール pip install pyautogui
画面座標とカーソル位置について
PyAutoGUIを使用するにあたって、画面上の座標について理解しておく必要があります。
画面上の位置はXとYのデカルト座標で示されます。左上をx,y=(0,0)とし、X座標は右に行くほど大きくな理、Y座標は下に行くほど大きくなります。
画面の解像度が1920 x 1080の場合、右下のピクセルはX,Y=(1919,1079)になります。
0,0 X increases --> +---------------------------+ | | Y increases | | | | 1920 x 1080 screen | | | | V | | | | +---------------------------+ 1919, 1079
画面解像度はsize()関数によって、マウスカーソルの現在座標は position() 関数で分かります。
また、XY座標が画面上にあるかどうかを確認するには、onScreen()
関数を使用します。
#画面解像度を返す pyautogui.size() #マウスカーソルの現在座標を返す pyautogui.position() #指定した座標があるかを確認 True or False pyautogui.onScreen(0, 0)
以下は、pyautogui.position()を利用して、マウスカーソルの位置を常に出力するプログラムです。
import pyautogui, sys print('Press Ctrl-C to quit.') try: while True: x, y = pyautogui.position() positionStr = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4) print(positionStr, end='') print('\b' * len(positionStr), end='', flush=True) except KeyboardInterrupt: print('\n')
マウス操作
moveTo()関数は、引数のX,Y座標にマウスカーソルを移動させます。座標の代わりに None を渡すと、その方向には移動しません。
pyautogui.moveTo(100, 200) # moves mouse to X of 100, Y of 200. pyautogui.moveTo(None, 500) # moves mouse to X of 100, Y of 500. pyautogui.moveTo(600, None) # moves mouse to X of 600, Y of 500.
通常、マウスカーソルは即座に新しい座標に移動します。マウスをゆっくり移動させたい場合は、第3引数に移動時間(秒単位)を渡します。移動時間を指定することで、人間味のある動きになりますね。
(※設定時間がpyautogui.MINIMUM_DURATION
より小さい場合、動きは瞬時に行われます。デフォルトでは0.1です。代入することで変更可能です。)
pyautogui.moveTo(100, 200, 2) # moves mouse to X of 100, Y of 200 over 2 seconds
現在の位置に対してマウスカーソルを移動する場合は、move()
関数を使用します。この関数は、moveTo()
同様のパラメータを持っています。
pyautogui.moveTo(100, 200) # moves mouse to X of 100, Y of 200. pyautogui.move(-30, None) # move the mouse left 30 pixels.
Tween / Easing機能(おまけ)
PyAutoGUIには様々なTween関数があり、マウスの動きを変えることが出来ます。pyautogui.easeInQuad関数をmoveTo()、move()、dragTo()、drag()関数の第4引数に渡すことで、マウスカーソルがゆっくりと動き始め、目的地に向かってスピードアップしていきます。pyautogui.easeOutQuadはその逆で、マウスカーソルは速く動き始め、目的地に近づくにつれて遅くなります。pyautogui.easeOutElasticは目的地をオーバーシュートし、目的地で落ち着くまで前後に バウンドします。
pyautogui.moveTo(100, 100, 2, pyautogui.easeInQuad) # start slow, end fast pyautogui.moveTo(100, 100, 2, pyautogui.easeOutQuad) # start fast, end slow pyautogui.moveTo(100, 100, 2, pyautogui.easeInOutQuad) # start and end fast, slow in middle pyautogui.moveTo(100, 100, 2, pyautogui.easeInBounce) # bounce at the end pyautogui.moveTo(100, 100, 2, pyautogui.easeInElastic) # rubber band at the end
これらのTween関数は、Al SweigartのPyTweeningモジュールからコピーされます:https://pypi.python.org/pypi/PyTweening https://github.com/asweigart/pytweening このモジュールは、Tween関数を使用するためにインストールする必要はありません。
独自のTween関数を作成する場合は、0.0
(マウスの移動の開始を表す)と1.0
(マウスの移動の終了を表す)の間の単一の浮動小数点引数を取り、0.0
から1.0
の間の浮動小数点数の値を返す関数を定義します。
ドラッグ
PyAutoGUIのdragTo()関数とdrag()関数は、moveTo()関数とmove()関数と同様のパラメータを持ちます。さらに、これらの関数には button キーワードがあり、’left’、’middle’、’right’ に設定することで、ドラッグ中にどのマウスボタンを押し続けるかを指定できます。例えば
pyautogui.dragTo(100, 200, button='left') # drag mouse to X of 100, Y of 200 while holding down left mouse button pyautogui.dragTo(300, 400, 2, button='left') # drag mouse to X of 300, Y of 400 over 2 seconds while holding down left mouse button pyautogui.drag(30, 0, 2, button='right') # drag the mouse left 30 pixels over 2 seconds while holding down the right mouse button
クリック
click()関数は、マウスの左ボタンクリックをシミュレートします。
また、引数にX,Y座標を渡すことで、移動してからクリックすることが出来ます。
pyautogui.click() # click the mouse pyautogui.click(x=100, y=200) # move to 100, 200, then click the left mouse button.
クリックする別のマウスボタンを指定するには、button
キーワード引数に'left''middle'
、または'right'
を渡します。
pyautogui.click(button='right') # right-click the mouse
複数回クリックするには、clicks
キーワード引数に整数を渡します。オプションで、interval
キーワード引数に浮動小数点数または整数を渡して、クリック間の時間を秒単位で指定できます。
pyautogui.click(clicks=2) # double-click the left mouse button pyautogui.click(clicks=2, interval=0.25) # double-click the left mouse button, but with a quarter second pause in between clicks pyautogui.click(button='right', clicks=3, interval=0.25) ## triple-click the right mouse button with a quarter second pause in between clicks
便利なショートカットとして、doubleClick()
関数はマウスの左ボタンをダブルクリックします。また、オプションにx
、y
、interval
、およびbutton
キーワード引数があります。
pyautogui.doubleClick() # perform a left-button double click
同様のオプションのキーワード引数を持つtripleClick()関数もあります。rightClick()
関数には、オプションのx
とy
のキーワード引数があります。
mouseDown() 関数と mouseUp() 関数
マウス・クリックとドラッグは、マウス・ボタンを押し下げる動作とマウス・ボタンを離す動作の両方で構成されます。これらのアクションを別々に実行したい場合は、mouseDown()関数とmouseUp()関数を呼び出します。これらの関数は、同じ x、y、およびボタンを持っています。
pyautogui.mouseDown(); pyautogui.mouseUp() # does the same thing as a left-button mouse click pyautogui.mouseDown(button='right') # press the right button down pyautogui.mouseUp(button='right', x=100, y=200) # move the mouse to 100, 200, then release the right button up.
スクロール
scroll()
関数でマウスのスクロールが出来ます。スクロールの量は、プラットフォームによって異なります。オプションで、x
とy
のキーワード引数に整数を渡して、スクロールを実行する前にマウスカーソルを移動させることができます。
pyautogui.scroll(10) # scroll up 10 "clicks" pyautogui.scroll(-10) # scroll down 10 "clicks" pyautogui.scroll(10, x=100, y=100) # move mouse cursor to 100, 200, then scroll up 10 "clicks"
OS XおよびLinuxプラットフォームでは、PyAutoGUIはhscroll()関数を呼び出すことで水平スクロールを実行することもできます。
pyautogui.hscroll(10) # scroll right 10 "clicks" pyautogui.hscroll(-10) # scroll left 10 "clicks"