「ばつ(X)ボタン」をして表示を消したのに、表示が消えないことがある場合の対処と処理時間を短縮する方法を説明する。
本来であれば、なぜボタンを押せなかったのか?、あるいはなぜ表示が消えなかったのか?の原因を調べるべきとは思うが、調べる方法がわかないので、「ばつ(X)ボタン」が表示されなくなる(非表示になる)のを待つことにした。
指定時間待っても非表示にならない場合は、再度ボタンを押してリトライすることで対応した。
非表示になるのを待つときに、すでに非表示の場合に時間がかかるので、その対応方法を説明する。
下記サイトを参考にした。
https://stackoverflow.com/questions/24928582/expectedcondition-invisibility-of-element-located-takes-more-time-selenium-web
https://www.binarydevelop.com/article/webdriver-webdriverwait-29105
動作環境:
Python 3.8.3
OS:Windows10-Pro [Version 10.0.19044.1889]
ブラウザ:Chrome 105.0.5195.54(Official Build) (64 ビット)
ライブラリ:Selenium 4.3.0(Selenium 3とはパラメータの渡し方が異なる)
サイト:Google Maps(https://maps.google.co.jp/)
(1)GoogleMapsで「会社の詳細情報」を表示中の画面である。
(2)「会社の詳細情報」画面の右上のばつ(X)ボタンを押して、正常に「会社の詳細情報」画面が表示されなくなった場合の画面である。
(3)「会社の詳細情報」画面の右上の「ばつ(X)ボタン」を押して、「ばつ(X)ボタン」が表示されなくなるのを待つソースである。
22行目のWebDriverWait()で「ばつ(X)ボタン」のElement(要素)が表示されなくなるのを待つが、すでに「ばつ(X)ボタン」が表示されていない場合は、10秒間待ってしまう。これは、11行目のdriver.implicity_wait(10)の設定が有効になっているためである。
それで、WebDriverWait()の前にdriver.implicity_wait(0)を実行するようにして、非表示になるのを待つ「WebDriverWait(driver, 20, 0.5)」にパラメータ指定した最大「20」(秒)待つようにすることができた。チェック間隔は「0.5」(秒)を指定した。「0.5」は省略時のデフォルト値であるが、忘れないように指定した。