待機

記事
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="エラーメッセージ" )

サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す ココナラコンテンツマーケット ノウハウ記事・テンプレート・デザイン素材はこちら