敵のいない勉強部屋

日々学んだことや感じたことを書きます

英語字幕DB作成への道_Selenium編② (Explicit Wait)

Elementが作成されるのを待たずにElementを探しに行ってしまい、NoSuchElementExceptionが出てしまう問題を解決するために、ExplicitWaitの勉強をしました。

www.selenium.dev

他にもImplicitWaitとFluentWaitという方法がありますが、ExplicitWaitが使えれば事足りそうだったので、とりあえずこれだけ使えるようになろうと思いました。

from selenium.webdriver.support.ui import WebDriverWait

driver.navigate("file:///race_condition.html")
el = WebDriverWait(driver, timeout=3).until(lambda d: d.find_element_by_tag_name("p"))
assert el.text == "Hello from JavaScript!"  

こんな感じで、WebDriverで呼び出したい関数を、無名関数でくるんでuntil関数に渡して上げれば良いようです。
時間はtimeoutのところで秒数を設定してあげると。

これだけで、timeoutに設定した秒数の間はNoSuchElementを無視して何度もリトライしてくれるみたいです。

成功すればWebDriverで呼び出した関数の返り値が帰ってきて、失敗するとTimeoutの例外になるそうです。

シンプルでわかりやすい!!

今日も頑張った! おやすみなさい!