「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Python Selenium で複数の要素を確実にロードするにはどうすればよいですか?

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

2024 年 11 月 8 日に公開
ブラウズ:203

How to Ensure Multiple Elements Load in Python Selenium?

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

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

すべての要素の可視性:

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

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]")
    )
)

特定の数の要素を待機:

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

WebDriverWait(driver, 20).until(
    lambda driver: len(driver.find_elements_by_xpath(selector)) > int(myLength)
)

子要素の XPath:

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

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_')]")
    )
)

カスタム待機条件:

独自の待機条件を作成したい場合は、webdriver.support.ui.ExpectedCondition:

[ のサブクラスを定義できます。 &&&]
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
WebDriverWait(driver, 30).until(MoreThanOne('li'))

DOM での要素損失の防止:

検索操作後に現在の要素が失われないようにするには、検索操作を実行する前に変数に要素を保存します。 wait:

element = driver.find_element_by_css_selector('ul')
WebDriverWait(element, 30).until(MoreThanOne('li'))

結論:

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

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3