待機
記事
IT・テクノロジー
Import from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait WAIT_SECONDS = 10 POLLING_FREQUENCY_SECONDS = 1
作成 wait = WebDriverWait(driver, WAIT_SECONDS)
wait = WebDriverWait(driver, WAIT_SECONDS, poll_frequency=POLLING_FREQUENCY_SECONDS)
待機時間 ページ読み込みの最大待機時間 driver.set_page_load_timeout(秒) 要素取得時の最大待機時間 driver.implicitly_wait(MAX_WAIT_SECONDS) driver.find_element(), driver.find_elements()用 待機条件判定を行う間隔の指定 WebDriverWait(driver, WAIT_SECONDS, poll_frequency=秒)
待機条件 存在する
wait.until(EC.presence_of_element_located(ロケータ))
wait.until(EC.presence_of_all_elements_located(ロケータ))
表示されている
wait.until(EC.visibility_of_element_located(ロケータ))
wait.until(EC.visibility_of_all_elements_located(ロケータ))
クリックできる
wait.until(EC.element_to_be_clickable(ロケータ))
フレームに移動できる 待機 + 移動
wait.until(EC.frame_to_be_available_and_switch_to_it(ロケータ))
新しいウィンドウが開いた existing_windows = driver.window_handles wait.until(EC.new_window_is_opened(existing_windows))
ページが変わった URLが変わる場合
initial_url = driver.current_url wait.until(EC.url_changes(initial_url)) URLが変わらない場合
遷移先のページの目印の要素が現れた
wait.until(EC.presence_of_element_located(ロケータ)) 元のページの目印の要素が消えた
wait.until(EC.staleness_of(要素)) 要素のテキストが変更された
old_text = 要素.text
wait.until(lambda d: 要素.text != old_text)
テキストが変更された
wait.until(lambda d: 要素.text != テキスト)
ロケータ
XPath
(By.XPATH, "XPath")
CSSセレクタ
(By.CSS_SELECTOR, "CSSセレクタ")
ID
(By.ID, "ID")
クラス
(By.CLASS_NAME, "クラス")
name属性
(By.NAME, "name属性")
タグ
(By.TAG_NAME, "タグ")
リンクテキスト
部分一致
(By.PARTIAL_LINK_TEXT, "テキスト")
完全一致
(By.LINK_TEXT, "テキスト")
例外処理
try:
elem = wait.until(期待される条件) except TimeoutException: print('要素が見つからなかった')
エラーメッセージの指定 wait.until(... , message="エラーメッセージ" )