Pythonで処理の自動化する場合、PyAutoGUIが便利です。
このPyAutoGUIは、いろいろなことを自動化できます。
この記事では、PyAutoGUIにおけるマウス操作を解説していきます。
「具体的にどのような処理をどのようなコードで実現できるのか?」
このことを中心に解説します。
本記事の内容
- マウス操作を自動化するための前提知識
- 移動
- ドラッグ
- クリック
- ダウン・アップ
- スクロール
それでは、上記に沿って解説していきます。
マウス操作を自動化するための前提知識
次の記事の内容は、最低限でも理解が必要です。
ただ、早い人なら、読むのに3分もかかりません。
これ以降の内容を理解するために、是非ともご覧ください。
とにかく、次のことだけの理解は必要です。
- サイズ(解像度)
- 座標
あと、手を動かすのが何よりも理解の早道です。
上記記事では、PyAutoGUIを動かす環境の構築方法についても触れています。
環境もコマンド一つで作れます。
では、上記記事の知識がある前提で進めます。
PyAutoGUIで対応できるマウス操作は以下。
- 移動
- ドラッグ
- クリック
- ダウン・アップ
- スクロール
これらについて、一つづつ説明していきます。
移動
移動に関係する関数は以下。
- moveTo()
- move()
moveTo()
moveTo()関数は、マウスカーソルを渡したXとYの整数座標に移動させます。
次のコードにより、画面左上「座標(0, 0)」にマウスカーソルを移動します。
(このコード以外のすべてコードで「import pyautogui」を省略)
import pyautogui pyautogui.moveTo(0, 0)
通常、マウスカーソルは即座に新しい座標に移動します。
マウスを徐々に新しい位置に移動させたい場合は、移動にかかる時間(秒単位)を第3引数に渡します。
例えば、以下のようになります。
pyautogui.moveTo(0, 0, 3)
3秒かけて、マウスカーソルが左上に移動しますね。
なお、第3引数の初期値は、pyautogui.MINIMUM_DURATIONです。
print(pyautogui.MINIMUM_DURATION)
この実行結果より、0.1秒だとわかります。
何も指定しなければ、0.1秒ということです。
move()
マウスカーソルを現在の位置から数ピクセル上に相対的に移動させます。
moveTo()は絶対、move()は相対(移動量)と覚えればよいでしょう。
わからない場合は、前提知識であるこの図に戻りましょう。
0,0 X increases --> +---------------------------+ | | Y increases | | | | 1920 x 1080 screen | | | | V | | | | +---------------------------+ 1919, 1079
この図をベースにすると、以下のコードは右下に移動します。
pyautogui.move(100, 100)
実行すると、実際に右下に移動しますね。
では、左上に移動するには?
以下のように、マイナスの値を設定します。
pyautogui.move(-100, -100)
簡単ですね。
ちなみに、第3引数に関してはmoveTo()と同じです。
ドラッグ
ドラッグに関係する関数は以下。
- dragTo()
- drag()
dragTo() と drag() 関数は、moveTo() と move() 関数と同様のパラメータを持っています。
さらに、ドラッグ中に押さえるマウスボタンを ‘left’、’middle’、’right’ に設定できるボタンキーワードを持っています。
左ボタンを押したままドラッグするなら、left。
中央ボタンを押したままドラッグするなら、middle。
右ボタンを押したままドラッグするなら、right。
dragTo()
以下のようにコーディングします。
pyautogui.dragTo(500, 500, 3, button='left')
今ある場所から、座標(500, 500)に3秒かけて左ボタンを押したままのドラッグとなります。
drag()
相対的(移動量を指定して)にドラッグする場合は、以下のコードです。
pyautogui.drag(30, 0, 2, button='right')
今ある場所から、2秒かけて右に30pxだけ右ボタンを押したままのドラッグとなります。
クリック
クリックに関係する関数は以下。
- click()
- doubleClick()
- tripleClick()
- rightClick()
クリックに変わりはありませんが、それぞれ異なります。
これらを説明していきます。
click()
click() 関数は、マウスの現在位置での左ボタンのマウスクリックをシミュレートします。
「クリック」とは、ボタンを下に押してから上に離すことです。
基本的な使い方は、以下。
pyautogui.click()
でも、これでは何が何だかわかりません。
マウスカーソルの現在位置をクリックするだけです。
そこで、場所(座標)を指定して利用することになります。
指定した座標に移動するには、moveTo()を利用できましたね。
座標(200, 200)をクリックするのは、次のコードとなります。
pyautogui.moveTo(200, 200) pyautogui.click()
別に上記コードでもいいのですが、次のコードでも同じことが実現できます。
pyautogui.click(x=200, y=200)
他にxとy以外には、以下の引数があります。
- button
- clicks
- interval
button
設定できる値は、以下。
- left
- middle
- right
どのボタンをクリックするかを指定できます。
click()は、左ボタンをデフォルトです。
右クリックをしたいなら、以下のコードとなります。
pyautogui.click(button="right")
clicks
クリック回数の指定ができます。
ダブルクリックは、以下のコードで対応します。
pyautogui.click(clicks=2)
interval
クリック間の一時停止時間を秒単位で指定することが可能。
floatまたは整数を設定できます。
次のように、clicksとの利用が前提となります。
pyautogui.click(clicks=2, interval=0.25)
doubleClick()
click()と同じく、次の引数が利用可能。
- x
- y
- button
- clicks
- interval
引数なしのdoubleClick()です。
pyautogui.doubleClick()
上記は、以下のコードと同じ処理を行ないます。
pyautogui.click(clicks=2)
tripleClick()
click()と同じく、次の引数が利用可能。
- x
- y
- button
- clicks
- interval
引数なしのtripleClick()です。
pyautogui.tripleClick()
上記は、以下のコードと同じ処理を行ないます。
pyautogui.click(clicks=3)
rightClick()
次の引数が利用可能。
- x
- y
引数なしのrightClick()です。
pyautogui.rightClick()
上記は、以下のコードと同じ処理を行ないます。
pyautogui.click(button="right")
ダウン・アップ
ダウン・アップに関係する関数は以下。
- mouseDown()
- mouseUp()
マウスのクリックとドラッグは、マウスのボタンを下に押してから上に戻すという動作の両方で構成されています。
これらの動作を別々に実行したい場合は、mouseDown() と mouseUp() 関数を呼び出します。
ともに同じ引数を持ちます。
指定しなければ左ボタンがデフォルトで指定となります。
- x
- y
- button
コードでも動作を確認しておきます。
これは、クリックでしたね。
pyautogui.click()
上記と同じ処理は、次のコードで実現できます。
pyautogui.mouseDown() pyautogui.mouseUp()
スクロール
スクロールに関係する関数は以下。
- scroll()
- vscroll()
- hscroll()
スクロールする「クリック数」を整数で渡すことで、マウスのスクロールホイールをシミュレートすることができます。
1 回の「クリック」でのスクロールの量は、プラットフォームによって異なります。
オプションの引数として、以下があります。
- x
- y
scroll()
上スクロールは、以下となります。
pyautogui.scroll(10)
これに対して、下スクロールは以下。
pyautogui.scroll(-10)
移動させてから、スクロールする場合は以下のようにします。
pyautogui.scroll(10, x=100, y=100)
click()と同じですね。
同じように、以下のコードで実現できます。
pyautogui.moveTo(10, 10) pyautogui.scroll(10)
vscroll()
scroll()は、vscroll()と同じです。
基本は、縦スクロールということですね。
hscroll()
水平スクロールの場合、この関数を利用します。
公式サイトによると、OS XやLinuxプラットフォームと利用できるようです。