PythonのPyAutoGUIを使うと、マウス移動、クリック、キーボード操作、画像認識が可能です。これにより、パソコン操作のほとんどすべてを自動化できます。
RPAの代替として使えます。
インストール
pip install pyautogui
基本
次のようにして使用します。
import pyautogui
マウス
マウス移動(絶対)
pyautogui.moveTo(x, y)
マウス移動(相対)
pyautogui.move(x, y)
pyautogui.moveRel(x, y)
移動時間
「duration」で移動時間(秒)を指定できます。
pyautogui.moveTo(x, y, duration=num_seconds)
マウスドラッグ
ドラッグします。相対座標です。
pyautogui.dragTo(x, y, button=’left’)
クリック
クリックします。絶対座標です。引数なしの場合はその場でクリックします。
pyautogui.click()
pyautogui.click(x, y)
pyautogui.rightClick(x, y)
pyautogui.doubleClick(x, y)
画像をクリック
画像検索には「locateOnScreen」などを使用しますが、「click」の引数に画像ファイルを指定するとその中心をクリックします。
pyautogui.click(image_path)
ダウン、アップ
pyautogui.mouseDown(x, y)
pyautogui.mouseUp(x, y)
キーの入力
通常
順にキーを押します。日本語の場合はうまくいかないことがありますので、クリップボードに入れて貼り付けるのが良い方法です。
pyautogui.typewrite([‘a’, ‘b’, ‘c’])
ホットキー
同時にキーを押します。
pyautogui.hotkey(‘ctrl’, ‘v’)
ダイアログ
アラート
pyautogui.alert(‘文字列表示’)
コンファーム
pyautogui.confirm(‘OKとキャンセル’)
プロンプト
キャンセルを押した場合は「None」が返ります。
pyautogui.prompt(‘文字列入力’)
スクリーンショット
通常
画面全体のスクリーンショットを撮り、Pillowのイメージオブジェクトを返します。
im = pyautogui.screenshot()
「region」を使用すると範囲を指定できます。
im = pyautogui.screenshot(region=(x0, y0, x1, y1))
保存
画面全体のスクリーンショットを撮り、ファイル名を付けて保存します。拡張子に応じた形式で保存されます。
pyautogui.screenshot(“all.png”)
pyautogui.screenshot(“all.jpg”)
画像検索
画面上にあるボタンなどをクリックする場合などに使用できます。
ボタンなどのスクリーンショットを画像として保存しておき、これを指定することでクリックが可能です。
通常は最初に見つけた画像が対象となります。
画像の座標を取得
指定した画像ファイルと同じ画像を画面上から探し、上下左右の座標を返します。
location = pyautogui.locateOnScreen(image_path)
x, y = pyautogui.center(location)
画像の中心座標を取得
中心の座標を返します。クリックする場合はこれを使用します。
x, y = pyautogui.locateCenterOnScreen(image_path)
画像の中心をクリック
画像の中心をクリックします。シンプルな記述方法です。
pyautogui.click(image_path)
画像検索の挙動
次のようにすると上下左右の座標を取得できます。
location = pyautogui.locateOnScreen(“button.png”)
print(location) # Box(left=106, top=185, width=96, height=50)
次のようにすると中心座標を取得できます。
location = pyautogui.locateCenterOnScreen(“button.png”)
print(location) # Point(x=154, y=210)
次のようにすると合致する画像全てを取得します。
location = pyautogui.locateAllOnScreen(“button.png”)
print(location) #
print(list(location)) # [Box(left=106, top=185, width=96, height=50)]
テクニック
待機
処理が早すぎるとボタンのクリックを「空振り」してしまうことがありますので、「sleep」を使用して待機します。
import time
time.sleep(3)
画像を検索してクリックするような処理の場合は、以下のような関数を使用すると「sleep」不要で素早く処理できます。
"""
指定された画像を探索し、見つかったらクリックする。
タイムアウトまでに画像が見つからなければ処理終了。
"""
start_time = time.time()
print(f"画像探索開始: {image_path}")
while time.time() - start_time < timeout:
try:
location = pyautogui.locateOnScreen(image_path) # 画像探索 (例外対策)
if location: # 画像が見つかった場合
center = pyautogui.center(location) # 中心座標を取得
pyautogui.click(center) # 中心をクリック
print(f"画像が見つかりました。クリックしました: {center}")
return # 処理成功で終了
except pyautogui.ImageNotFoundException as e:
print(f"画像探索失敗: {e}") # エラーを通知
time.sleep(interval) # 再探索まで待機
print(f"タイムアウトで画像が見つかりませんでした: {image_path}")
文字列の入力
「typewrite」を使用すると文字の入力ができますが、日本語だとうまくいかないことがあります。クリップボードに入れてペーストすると良いでしょう。
import time
import pyperclip
text = "こんにちは"
pyperclip.copy(text)
time.sleep(3)
pyautogui.hotkey('ctrl', 'v')


コメント