Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

Pythonでマウス操作自動化

先日Pythonでキーボード操作自動化の方法をまとめてみました。
elsammit-beginnerblg.hatenablog.com

今回はマウス操作自動化方法についてまとめていきたいと思います。



■環境構築

先日のキーボード自動化と同様に、
PyAutoGUI
を用います。
PyAutoGUIは下記でインストールできます。

pip install pyautogui

またPythonのバージョンは前回と同様、
Python 3.7.4
を用います。

■マウス操作自動化

では実際にマウス操作を自動化していきます。
簡単な例としてこちらのコードを掲載します。

import pyautogui
import time

time.sleep(3)
pyautogui.dragTo(500, 500, button='left',duration=0.5) 
pyautogui.dragTo(700, 200, button='left',duration=0.5)
pyautogui.dragTo(200, 200, button='left',duration=0.5)

ペイントを開き、
プログラム実行後、ペイントにマウスカーソルをセットすると
セットした位置から
(500,500)→(700,200)→(200,200)
で線が引かれていくかと思います。

例えば、こちらを実行するとこちらのような絵が描けます。
座標は絶対値指定ですので、初期座標によって進む方向が異なります。
f:id:Elsammit:20210919175946p:plain

durationはマウスを動かす速度、
buttonはマウスクリックの向き?を示しています。
今回leftで0.5を指定しましたので、
左クリックした状態で0.5秒の速度で指定した座標で動作させております。

マウスをクリックさせながら動作させるAPIとして、
pyautogui.drag
があります。
公式が公開しているコードになるのですが、

import pyautogui
distance = 200
while distance > 0:
    pyautogui.drag(distance, 0, duration=0.1)   
    distance -= 5
    pyautogui.drag(0, distance, duration=0.1)   
    pyautogui.drag(-distance, 0, duration=0.1)  
    distance -= 5
    pyautogui.drag(0, -distance, duration=0.1)  

を実行し、ペイント上で線を引くとこちらのようにぐるぐると線を書くことが出来ます。
※参考:https://pyautogui.readthedocs.io/en/latest/mouse.html
f:id:Elsammit:20210919180931g:plain

pyautogui.dragは指定した位置から相対位置で線を引く形になります。

■その他のAPIに関して

オーソドックスな操作である、クリックやマウス操作のAPIも存在します。

pyautogui.click()

は単純な左クリックを実行するAPIです。
右クリックを行いたい場合には、

pyautogui.click(button='right')

を用います。

ダブルクリックの場合には、

pyautogui.click(clicks=2)

とするかもしくは、

pyautogui.doubleClick()

とすればOK。

マウス移動に関しては、

pyautogui.moveTo(X座標, Y座標)

pyautogui.move(X座標, Y座標)

で実現できます。
先ほどのdragと同様に、
moveTo関数の場合には絶対位置指定、
move関数の場合には相対位置指定になります。

さらに、moveTo、move関数では第3引数に数値を与えることでdurationのように移動する速度を制限することが出来ます。
例えば、

pyautogui.moveTo(100, 100,1)

とすれば、1秒で(100,100)の位置へ、マウスを移動させることが出来ます。

■マウスの位置を調べる方法

こちらも公式に掲載されていたのですが、マウスの位置を調べるコードを載せておきます。

def checkMouseCoursol():    
    while True:
        x, y = pyautogui.position()
        positionStr = 'X: ' + str(x).rjust(3) + ' Y: ' + str(y).rjust(3)
     print(positionStr, end='')
        print('\b' * len(positionStr), end='', flush=True)

※参考:https://pyautogui.readthedocs.io/en/latest/mouse.html

こちらのコードを実行すると、マウスの位置がコンソール上に表示されます。
画面上のどこにマウスを操作しているのかあらかじめ調べる際に便利なコードですので載せておきました。

■最後に

今回は前回に引き続きマウス操作の自動化をまとめてみました。
自分はまだマウス操作の自動化は使い道がないのですが、使いたいと思った時にこちらのブログを読み返してみたいと思います。