こんにちは
島村竜一です。
前回Python Seleniumについて記事を書かせていただきました。
https://goodsystem.jp/ai/seleniumisdefinitelythebest_20240625.html
今回はSeleniumを使って初心者が間違いやすい待機について記事を書きました。
待機がうまくできないとせっかくのプラグラムがうまく動きません。
待機はSeleniumを使う時にとても大事な概念なのでぜひ読んでくださいね。
そもそも待機とは
そもそも待機について解説をさせていただきます。
Seleniumはブラウザーを自動操作するための技術になります。
ブラウザーはさまざまなホームページをみるためのソフトになります。
昔に比べてホームページの回線スピードはかなりあがったのでスイスイとホームページを見ることができるようになりました。
ただネットワークのの速度や表示されるコンテンツによってしばらくしないと表示されないことがやはりあります。
そのためSeleniumがホームページの「送信」というボタンをクリックして動くプログラムにおいて
「送信」ボタンが表示される前にプログラムからクリックの操作を行うとエラーが発生します。
これを防ぐために送信ボタンが表示されるまでにプログラム上で待つという行動をさせる必要があります。
これを「待機」といいます。
Python Seleniumの「待機」は3つある。
さて待機の方法ですが、
①
システムにやみくもに5秒待つやり方
time.sleep(5)
②
暗黙的な待機のやり方
ソース全体で指定した要素が表示されるまで待つやり方
driver.implicitly_wait(10)
element = driver.find_element(By.ID, "someElementId")
③
明示的な待機のやり方
要素をひとつづつ指定するやり方
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "someElementId"))
)
この3つがあります。
ではこれらの使い分けがポイントになります。
まずOutなのが
①
システムにやみくもに5秒待つやり方
time.sleep(5)
になります。
大概のPythonの書籍でこのような書き方が多いです。
ただこのやり方は単純に5秒待つだけなので5秒待った後対象のボタンが表示されているかどうか分かりません。
またすぐに表示された場合5秒も待つのは無駄ということになります。
なのでくれぐれも①は実装しないようにしてください。
なのでお勧めは②と③になります。
②と③は両方ともsomeElementIdというものが見つかるまで10秒待機します。
待機したのちに存在しなかったらエラーが発生します。
とっても賢い待機ですよね。
大事なのは②と③の使い分けになります。
②はそのプログラム全体での待機
③はプログラム内で指定した要素の待機
になります。
③を実装する時はもし画面に表示される要素に時間がかかる場合は使うなどの使い分けが大事になります。
注意するのは②と③でうまく行かなった場合のエラー処理が異なるということです。
②がNoSuchElementException
③がTimeoutException
が発生します。
これらをきちんと指定するようにしてくださいね。
まとめ:Seleniumの待機はキチンと要素が表示されるまで待機すること
Pythonでブラウザーを操作する時にお勧めなのがSeleniumになります。
Seleniumはブラウザーを操作するため画面に必要情報が表示されていない状態で
動かすとエラーになる可能性がとても高くなります。
キチン操作対象が表示されるのをまってプログラムを動かすようにしましょう。
そのためにも待機はとても大切です。
暗黙的な待機
例
driver.implicitly_wait(10)
element = driver.find_element(By.ID, "someElementId")
明示的な待機
例
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "someElementId"))
)
を使い分けるようにしましょう。
ここまで読んでくださってありがとうございます。
Python開発、AI開発に興味のある会社様、ぜひメルマガに登録してみてくださいね。
お役に立つ情報やセミナー情報などをお届けます。
ではまた次のブログでお逢いしましょう。
仕事の生産性をあげるためさまざまな方法を試しました。その結果UiPathにたどり着き現在UiPathを使った業務効率化の開発、講師の仕事をしています。
講師、開発などの相談はお問い合わせからお願いします。