Python Selenium で複数の要素を確実にロードするにはどうすればよいですか?

DDD
リリース: 2024-10-30 00:52:02
オリジナル
816 人が閲覧しました

How to Ensure Multiple Elements Load in Python Selenium?

Python Selenium: 複数の要素のロードの確認

AJAX 経由で動的にロードされた要素を扱う場合、その外観を確認するのが難しい場合があります。このシナリオを処理するには、Selenium の WebDriverWait とそのさまざまな戦略を利用して、複数の要素の存在を確認します。

すべての要素の可視性:

の可視性を確認するには特定のセレクターに一致するすべての要素については、visibility_of_all_elements_located() 条件を使用できます:

<code class="python">from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

elements = WebDriverWait(driver, 20).until(
    EC.visibility_of_all_elements_located(
        (By.CSS_SELECTOR, "ul.ltr li[id^='t_b_'] > a[id^='t_a_'][href]")
    )
)</code>
ログイン後にコピー

特定の数の要素を待機:

待機する必要がある場合特定の数の要素をロードするには、ExpectedConditions クラスでラムダ関数を使用できます:

<code class="python">WebDriverWait(driver, 20).until(
    lambda driver: len(driver.find_elements_by_xpath(selector)) > int(myLength)
)</code>
ログイン後にコピー

子要素の XPath:

子を待機するにはDOM 全体を検索するのではなく、親要素内の要素を検索するには、XPath 式を利用できます:

<code class="python">WebDriverWait(driver, 20).until(
    EC.presence_of_element_located(
        (By.XPATH, "//ul[@class='ltr']//li[starts-with(@id, 't_b_')]/a[starts-with(@id, 't_a_')]")
    )
)</code>
ログイン後にコピー

カスタム待機条件:

独自の待機条件を作成したい場合待機状態を回避するには、webdriver.support.ui.ExpectedCondition:

<code class="python">class MoreThanOne(webdriver.support.ui.ExpectedCondition):
    def __init__(self, selector):
        self.selector = selector

    def __call__(self, driver):
        elements = driver.find_elements_by_css_selector(self.selector)
        return len(elements) > 1</code>
ログイン後にコピー
<code class="python">WebDriverWait(driver, 30).until(MoreThanOne('li'))</code>
ログイン後にコピー

DOM での要素損失の防止:

のサブクラスを定義できます。検索操作後に現在の要素を失った場合は、待機を実行する前に変数に保存します。

<code class="python">element = driver.find_element_by_css_selector('ul')
WebDriverWait(element, 30).until(MoreThanOne('li'))</code>
ログイン後にコピー

結論:

これらの手法は、柔軟で堅牢な方法を提供します。 Selenium で複数の要素がロードされるのを待ちます。要件に応じて、ユースケースに最も適したアプローチを選択してください。

以上がPython Selenium で複数の要素を確実にロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート