はじめに
SeleniumでWeb画面で操作を行う際に、要素(エレメント)が見つからずエラーになる事がありました。
Seleniumで画面がすべて描画される前に要素にアクセスしようとして対象が見つからないとなったからです。
今回はWebでオブジェクトが表示されるまで待つ方法(最大時間を設定)する方法についてです。
コードとTips
オブジェクトの表示を待つ方法
使い方
やり方としては、「WebDriverWait(driver, time).until()」を使います。
これは、Seleniumでブラウザの操作を自動化する際に、特定の要素がロードされるのを待つために使用されるメソッドです。
WebDriverWait
には2つのパラメータがあります。一つ目のパラメータはWebDriverのインスタンス(ここではdriver
)で、二つ目のパラメータは最大待機時間(秒)です。
WebDriverWait(driver, 10)とすると最大10秒待機するという意味になります。
until()
メソッドは、特定の条件が満たされるまで待機します。この条件はexpected_conditions
モジュールを使用して指定します。
サンプルソース
次のソースコードはWebDriverWaitを使った例になります。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# ChromeのWebDriverオブジェクトを作成します。
driver = webdriver.Chrome()
driver.get("http://www.example.com")
try:
# IDが"myDynamicElement"である要素が存在するまで最大10秒間待ちます。
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "myDynamicElement"))
)
finally:
driver.quit()
URLなどは都度変更してください。
さいごに
今回はSeleniumでオブジェクトの描画まで時間を指定してWaitする方法でした。
サイトによっては描画に時間がかかるものもあります。
また存在しなくなったページなどは最大時間待つと処理を次へ移るみたいな使い方もできると思います。
この記事がお役に立ったのなら嬉しいです。
最後までお読みいただきありがとうございます。