ホームページ >バックエンド開発 >Python チュートリアル >Python で Selenium を使用して複数の要素が読み込まれるのを待つ方法は?

Python で Selenium を使用して複数の要素が読み込まれるのを待つ方法は?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-02 22:45:30961ブラウズ

How to Wait for Multiple Elements to Load Using Selenium in Python?

Python で Selenium を使用して複数の要素がロードされるのを待つ方法

AJAX 経由で非同期的にロードされる動的 Web 要素を操作する場合、次のようになります。要素に対してアクションを実行する前に、要素が完全にロードされていることを確認することが重要です。この記事では、Python で Selenium を使用して複数の要素が読み込まれるのを待機するいくつかの方法を説明します。

カスタム条件で WebDriverWait を使用する

1 つの方法では、 WebDriverWait クラス。この条件では、特定のセレクターに一致する要素の数が指定されたしきい値を超えているかどうかを確認します。例:

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

def wait_for_multiple_elements(driver, selector, min_count):
    """
    Wait for a minimum number of elements to load.
    Args:
        driver (WebDriver): Selenium WebDriver instance.
        selector (str): CSS selector for the elements.
        min_count (int): Minimum number of elements to wait for.
    """
    def custom_condition(d):
        elements = d.find_elements(By.CSS_SELECTOR, selector)
        return len(elements) >= min_count

    return WebDriverWait(driver, 30).until(custom_condition)</code>

Visibility_of_All_Elements_Located で WebDriverWait を使用する

このアプローチでは、組み込みの Visibility_of_all_elements_located() の期待条件を使用して、指定されたロケーターに一致するすべての要素が見つかるまで待機します。見える。例:

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

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>

Lambda 関数の使用

特定の数の要素が読み込まれるまで待機する必要がある場合は、WebDriverWait で Lambda 関数を使用できます。たとえば、10 個の要素を待機するには:

<code class="python">WebDriverWait(driver, 20).until(
    lambda driver: len(driver.find_elements_by_xpath("//ul[@class='ltr']//li[starts-with(@id, 't_b_')]/a[starts-with(@id, 't_a_') and starts-with(., 'Category')]")) == 10
)</code>

Waiting for Child Elements

特定の親要素の子要素を待機するには、.find_element_by_... メソッドを親要素に適用し、上記の待機テクニックを子要素に適用します。

References

  • [ Selenium Python ドキュメント](https://selenium-python.readthedocs.io/waits.html)
  • [Selenium と Python を使用して特定の数の要素がロードされるのを待つ方法](https://stackoverflow .com/questions/58851190/how-to-wait-for-number-of-elements-to-be-loaded-using-selenium-and-python)

以上がPython で Selenium を使用して複数の要素が読み込まれるのを待つ方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。