【PyAutoGUI】Pythonでマウスを操作する

効率化

✔️ 本記事の内容

本記事では、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()関数はマウスの左ボタンをダブルクリックします。また、オプションにxyinterval、およびbuttonキーワード引数があります。

pyautogui.doubleClick()  # perform a left-button double click

同様のオプションのキーワード引数を持つtripleClick()関数もあります。
rightClick()関数には、オプションのxyのキーワード引数があります。

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()関数でマウスのスクロールが出来ます。スクロールの量は、プラットフォームによって異なります。オプションで、xyのキーワード引数に整数を渡して、スクロールを実行する前にマウスカーソルを移動させることができます。

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"

タイトルとURLをコピーしました