英語字幕DB作成への道_Selenium編② (Explicit Wait)
Elementが作成されるのを待たずにElementを探しに行ってしまい、NoSuchElementExceptionが出てしまう問題を解決するために、ExplicitWaitの勉強をしました。
他にも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の例外になるそうです。
シンプルでわかりやすい!!
今日も頑張った! おやすみなさい!