ホームページ >バックエンド開発 >Python チュートリアル >Python で Selenium を使用して複数の要素が読み込まれるのを待つ方法は?
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
以上がPython で Selenium を使用して複数の要素が読み込まれるのを待つ方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。