pyautogui
はマウスやキーボードを自動で操作できる強力なライブラリですが、スクリプトが意図しない動作をした場合に、ユーザーがコンピュータの制御を失うリスクも伴います。この記事では、そのような事態を防ぐための重要な安全機能であるpyautogui.PAUSE
とpyautogui.FAILSAFE
について解説します。
pyautogui.PAUSE
:各操作間の自動的な一時停止
pyautogui.PAUSE
属性に秒数を設定すると、pyautogui
の各関数が実行された後に、指定した秒数だけプログラムが自動的に一時停止します。
これにより、スクリプトの実行速度が全体的に遅くなり、ユーザーが介入する時間的余裕が生まれます。また、GUIアプリケーションが自動操作に追いつくための待機時間を確保するのにも役立ちます。
import pyautogui
# pyautoguiの各関数の後に、1.5秒の一時停止を挿入する
pyautogui.PAUSE = 1.5
# 画面の(100, 200)に移動した後、1.5秒停止する
pyautogui.moveTo(100, 200)
# クリックした後、1.5秒停止する
pyautogui.click()
# テキストを入力した後、1.5秒停止する
pyautogui.write('Hello')
この設定は、スクリプトの冒頭で一度行うだけで、以降のすべてのpyautogui
関数に適用されます。
pyautogui.FAILSAFE
:緊急停止機能
pyautogui.FAILSAFE
属性をTrue
に設定すると、フェールセーフモードが有効になります。
このモードが有効な状態で、マウスカーソルを画面の左上隅(座標 0, 0
)に素早く移動させると、pyautogui
はpyautogui.FailSafeException
という例外を発生させ、プログラムを即座に強制終了させます。
これは、マウスが暴走して制御不能に陥った場合に、プログラムを停止させるための非常に重要な「緊急停止スイッチ」です。pyautogui
を使ったスクリプトを開発する際は、安全のために常に有効にしておくことが強く推奨されます。
import pyautogui
# フェールセーフ機能を有効にする
pyautogui.FAILSAFE = True
# 10秒間、マウスを右に動かし続けるループ
# 途中でマウスを左上に移動させると、プログラムが停止する
try:
for i in range(10):
pyautogui.moveRel(100, 0, duration=1)
print(f"移動 {i + 1}回目")
except pyautogui.FailSafeException:
print("フェールセーフ機能によりプログラムが停止しました。")
まとめ
pyautogui
で安全なGUI自動化スクリプトを作成するためには、pyautogui.PAUSE
とpyautogui.FAILSAFE
の2つの機能を理解し、適切に使用することが不可欠です。PAUSE
はスクリプトの実行速度を制御して安定性を高め、FAILSAFE
は万が一の際にプログラムを緊急停止させるための命綱となります。