Django Girls and Boys 備忘録

Python、Selenium、Django、java、iPhoneアプリ、Excelマクロなどで気付いたこと、覚えておきたいことなどを載せていきます。

【Python】Seleniumで要素が表示されているかを判定する方法

 

Webスクレイピングやテスト自動化を行う際に、特定の要素がページ上に表示されているかどうかを確認することが重要です。この記事では、PythonSeleniumを使って、要素が表示されているかどうかを確認する方法を分かりやすく解説します。

 

 

目次

 

 

背景

 


Seleniumは、ブラウザの自動操作を行うためのツールです。

しかし、単に要素がDOM(HTML構造)に存在しているかどうかだけでなく、ユーザーが実際にブラウザでその要素を確認できるか(表示されているか)をチェックすることが求められるケースがあります。

 

たとえば:
・非表示の要素はクリックできない。
・条件付きで表示されるエラーメッセージの有無を確認したい。

 

方法

 

 

Seleniumでは、要素が表示されているかを確認するために「is_displayed()」メソッドを使用します。

このメソッドは、要素がブラウザ上で表示されている場合に「True」を返し、表示されていない場合に「False」を返します。

 

基本コード

 

 

以下に、Seleniumを使った基本的なチェックコードを示します。

 

 

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# ブラウザを起動
driver = webdriver.Chrome()
try:
    # サンプルのウェブページを開く
    driver.get("https://example.com")
    # 要素を探す(例: ボタンのIDが'target-button'の場合)
    element = driver.find_element(By.ID, "target-button")
    # 要素が表示されているかチェック
    if element.is_displayed():
        print("要素は表示されています!")
    else:
        print("要素は表示されていません。")
finally:
    # ブラウザを閉じる
  driver.quit()

 

「is_displayed()」メソッドのポイント 

 

戻り値



「True」: 要素が表示されている場合
「False」:要素が非表示(`display: none;`や`visibility: hidden;`など)またはDOMに存在しない場合

 

非表示状態の具体例


・要素が「display」:none で非表示になっている。
・「visibility」:hidden で透明状態になっている。
・要素が画面外に移動している(CSSのpositionなどで)。

 

注意点

 要素が存在しない場合は「is_displayed()」を呼び出すとエラーになります。

そのため、「is_displayed()」を使う前に要素の存在を確認する必要があります。

 

・要素の存在チェック
以下のように`find_elements()`メソッドを使えば、要素の存在を安全に確認できます。

 

elements = driver.find_elements(By.ID, "target-button")
if elements:
    if elements[0].is_displayed():
        print("要素は表示されています!")
    else:
        print("要素は非表示です。")
else:
  print("要素が存在しません。")

 

応用例: 動的なページでの確認

 

 

 動的に要素が表示されるページでは、一定時間待つ処理を加えることが必要です。

その場合、「WebDriverWait」を使います。

 

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

# 要素が表示されるまで待機
try:
    element = WebDriverWait(driver, 10).until(
        EC.visibility_of_element_located((By.ID, "target-button"))
    )
    print("要素は表示されています!")
except TimeoutException:
  print("要素が表示されませんでした。")

 

 

このコードでは、画面内に「target-button」というIDの要素が表示されるか確認しています。

10秒間待機し、要素が表示されるのを待ちます。

表示された場合とされなかった場合で別々のプリント文を表示します。

 

まとめ

 


 以上が、Seleniumで要素が表示されているかを確認する方法になります。
・基本的には「is_displayed()」を使用。
・要素が存在しない可能性がある場合は、「find_elements()」でチェック。
・動的な要素には「WebDriverWait」を活用。

 

これらを組み合わせることで、より安定したスクレイピングや自動テストを実現できます。ぜひ試してみてください!

 

関連記事:

【Python】Seleniumでリンクテキストの一部を指定して要素を取得する方法 - Django Girls and Boys 備忘録

 

【Python】Seleniumでリンクテキストから要素を取得して操作する方法 - Django Girls and Boys 備忘録

 

【Python】Seleniumで要素が表示されているかを判定する方法 - Django Girls and Boys 備忘録

 

【Python Selenium】サイトへのアクセスで親フレームにアクセスする方法 - Django Girls and Boys 備忘録

 

【Python Selenium】カレントウインドウのウインドウサイズ設定方法(使用例:Chrome用、SeleniumVer4.6以前) - Django Girls and Boys 備忘録

 

【Python Selenium】ウインドウの位置の取得方法(使用例:Chrome用、SeleniumVer4.6以前) - Django Girls and Boys 備忘録

 

【Python Selenium】ウインドウの位置の取得方法(使用例:Chrome用、SeleniumVer4.6以降) - Django Girls and Boys 備忘録