
【初心者向け】pywinautoの待機処理の基本と実装例|エラーを防ぐテクニック

アプリの自動化を行うプログラムを作成しても、起動の待機処理が上手くいかず、思い通りの動作をしなかったという経験はありませんか?
私は何回もあります(笑)
アプリ自動化の際は、思い通りの動作をさせるために待機処理を加える必要があります。
pywinautoで自動化プログラムを作成する際に、考えられる待機方法は3つあります。
・wait_for_process_exit()
・wait()
・timingsモジュール
本記事では、上記3つの待機方法について解説していきたいと思います。
wait_for_process_exit()
wait_for_process_exit()の基本
wait_for_process_exit()
は、指定したプロセスが終了するまでスクリプトの実行を一時停止するメソッドです。
基本構文
以下の構文で使用します。
application.wait_for_process_exit(timeout=None)
引数 | 説明 |
---|---|
timeout |
プロセスの終了を待機する最大時間(秒単位)。省略すると無制限に待機。 |
基本的な使用例
以下のコードは、メモ帳(Notepad)を起動し、そのプロセスが終了するのを待機する例です。
from pywinauto import Application
# メモ帳を起動
app = Application().start("notepad.exe")
# プロセスの終了を待機(無制限)
app.wait_for_process_exit()
print("メモ帳が閉じられました。")
タイムアウトを指定する
プロセスの終了を待機する時間を制限したい場合は、timeout
引数を使用します。
from pywinauto import Application
# メモ帳を起動
app = Application().start("notepad.exe")
# 最大10秒間待機(10秒以内に閉じられなければ次の処理へ)
app.wait_for_process_exit(timeout=10)
print("タイムアウトまたはメモ帳が閉じられました。")
wait()
wait()の基本
wait()
は、ウィンドウやGUIコントロールが特定の状態になるまで待機するメソッドです。
基本構文
以下の構文で使用します。
window.wait(wait_for, timeout=None)
引数 | 説明 |
---|---|
wait_for |
待機する状態(例: "exists" , "visible" , "ready" など) |
timeout |
待機する最大時間(秒単位)。省略すると無制限に待機。 |
基本的な使用例
以下のコードは、メモ帳(Notepad)を起動し、ウィンドウが表示されるのを待機する例です。
from pywinauto import Application
# メモ帳を起動
app = Application().start("notepad.exe")
# ウィンドウが表示されるのを待つ
window = app.window(title="無題 - メモ帳")
window.wait("visible", timeout=10)
print("ウィンドウが表示されました。")
wait()のオプション(待機対象の状態)
wait()
メソッドは、以下のような状態を待機できます。
状態 | 説明 |
---|---|
exists |
ウィンドウまたはコントロールが存在するまで待機 |
visible |
ウィンドウまたはコントロールが画面上に表示されるまで待機 |
ready |
ウィンドウまたはコントロールが操作可能になるまで待機 |
よくあるエラーと対策
timingモジュール
timingモジュールの基本
timing
モジュールは、pywinautoの自動化スクリプトで待機時間を適切に設定するための機能を提供します。
基本構文
以下の主要な関数が使用されます。
from pywinauto import timing
# デフォルトの待機時間を設定
timing.Timings.window_find_timeout = 10
timing.Timings.window_find_retry = 0.1
プロパティ | 説明 | デフォルト値 |
---|---|---|
window_find_timeout |
ウィンドウが見つかるまでの最大待機時間(秒) | 5.0 |
window_find_retry |
ウィンドウ検索を繰り返す間隔(秒) | 0.5 |
control_find_timeout |
GUIコントロールが見つかるまでの最大待機時間(秒) | 10.0 |
control_find_retry |
GUIコントロール検索の再試行間隔(秒) | 0.2 |
基本的な使用例
以下のコードは、メモ帳(Notepad)を起動し、ウィンドウが見つかるまでの待機時間を調整する例です。
from pywinauto import Application, timing
# ウィンドウ検索のタイムアウト時間を設定
timing.Timings.window_find_timeout = 10
timing.Timings.window_find_retry = 0.1
# メモ帳を起動
app = Application().start("notepad.exe")
# ウィンドウを探す(設定されたタイムアウト内で検索)
window = app.window(title="無題 - メモ帳")
window.wait("ready")
print("ウィンドウが見つかりました。")
まとめ
本記事では、pywinautoの3つの待機処理の方法について解説してきました。
・wait_for_process_exit()
・wait()
・timingsモジュール
アプリをプログラムで自動化したい!
そう思った方は、今日学んだ待機処理をプログラムに組み込んでみてください。
ここまで読んでいただきありがとうございました。
関連記事もぜひ読んでみてください!
関連ページ

コメント