Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python入門】Selenium WebDriverの明示的な待機(Explicit Wait)の使い方を徹底解説

明示的な待機(Explicit Wait)とは、自動化スクリプト内で次のステップに進む前に、特定の条件が満たされるまでWebDriverに待機するよう指示する仕組みです。ページの読み込み速度や要素の表示タイミングは環境によって異なるため、固定時間のスリープではなく「条件ベース」の待機を行うことで、テストの安定性と信頼性が大きく向上します。

明示的な待機の実装方法

明示的な待機は、WebDriverWait クラスと expected_conditions モジュールを組み合わせて実装します。expected_conditions には、よく使われる待機条件があらかじめ多数用意されており、これらを WebDriverWait と併用することで柔軟な待機処理を実現できます。

主な期待条件(Expected Conditions)一覧

  • alert_is_present:アラートが表示されていること
  • element_selection_state_to_be:要素の選択状態が指定した状態であること
  • presence_of_all_elements_located:指定したロケーターに一致するすべての要素が存在すること
  • element_located_to_be_selected:指定した要素が選択されていること
  • text_to_be_present_in_element:要素内に指定したテキストが含まれていること
  • text_to_be_present_in_element_value:要素のvalue属性に指定したテキストが含まれていること
  • frame_to_be_available_and_switch_to_it:フレームが利用可能になり、そのフレームへ切り替わること
  • visibility_of_element_located:指定した要素が画面上に表示されていること
  • presence_of_element_located:指定した要素がDOM上に存在すること
  • title_is:ページタイトルが指定した文字列と完全に一致すること
  • title_contains:ページタイトルに指定した文字列が含まれていること
  • visibility_of:指定した要素が可視状態であること
  • staleness_of:要素が古くなった(DOMから削除された)こと
  • element_to_be_clickable:要素がクリック可能な状態であること
  • invisibility_of_element_located:指定した要素が非表示である、または存在しないこと
  • element_to_be_selected:要素が選択されていること

動作確認のシナリオ

ここでは、ページ上の「Team」というリンクをクリックした後に表示されるテキスト「Team @ Tutorials Point」を取得する例を紹介します。リンクをクリックしてから見出し(h1タグ)がDOMに出現するまでの間を、明示的な待機で制御します。

「Team」リンクをクリックすると、「Team @ Tutorials Point」というテキストが表示されます。

コード実装例

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Chrome()

# URLを起動
driver.get("https://www.tutorialspoint.com/about/about_careers.htm")

# 要素を特定してクリック
l = driver.find_element(By.LINK_TEXT, 'Team')
l.click()

# 明示的な待機の期待条件を設定
w = WebDriverWait(driver, 5)
w.until(EC.presence_of_element_located((By.TAG_NAME, 'h1')))

s = driver.find_element(By.TAG_NAME, 'h1')

# テキストを取得
t = s.text
print('Text is: ' + t)

# ブラウザを終了
driver.quit()

コードのポイント

  • WebDriverWait(driver, 5):最大5秒間、条件が満たされるまで待機します。条件が満たされれば即座に次の処理へ進むため、無駄な待ち時間が発生しません。
  • w.until(...):引数に渡した期待条件がTrueになるまでポーリング(既定では0.5秒ごと)を繰り返します。
  • EC.presence_of_element_located((By.TAG_NAME, 'h1')):h1タグの要素がDOM上に存在するようになるのを待ちます。
  • このコードは、Selenium 4で推奨される find_element(By.XXX, ...) の記法を使用しています。旧バージョンの find_element_by_tag_name などは廃止されているため注意してください。

実行結果

スクリプトを実行すると、コンソールに以下のように取得したテキストが出力されます。

Text is: Team @ Tutorials Point

このように明示的な待機を活用することで、要素の出現タイミングに左右されず、安定した自動テストスクリプトを作成できます。暗黙的な待機(Implicit Wait)との違いや使い分けについても理解しておくと、より実践的なテスト自動化が可能になります。

  1. PythonとSeleniumを使ったFacebook自動ログインの実装方法

    Pythonには「Selenium」というパッケージがあり、これを利用することでWebドライバーを介したブラウザ操作を自動化できます。本記事では、PythonのSeleniumパッケージを使ってFacebookに自動ログインする方法を解説します。 全体の流れ Seleniumは、Webブラウザの操作を自動化・制御するための強力なパッケージです。このプログラムを実行するには、Python環境へのSeleniumのインストールに加えて、「geckodriver」と呼ばれるドライバーソフトウェアが必要になります。以下の手順で実現できます。 ステップ1:Seleniumのインストール まず、Pyt

  2. PythonとSeleniumでWhatsAppチャットボットを作る方法

    はじめに この記事では、Pythonを使ってWhatsAppのチャットボットを作成する方法を解説します。TwitterやFacebook向けの一般的なチャットボットとは異なり、WhatsAppは運営ポリシーの関係上、プラットフォーム上で直接ボットを動かすことができません。 しかし、SeleniumというPythonの強力なパッケージを使えば、ブラウザの操作を自動化することでこれを実現できます。Seleniumを利用すれば、ブラウザ経由で「WhatsApp Web」を自由に操作できるのです。 必要なもの 準備が必要なのは、主に以下の3点です。 1. Selenium Seleniumはpip