Maison >développement back-end >Tutoriel Python >Comment attendre le chargement de plusieurs éléments à l'aide de Selenium en Python ?

Comment attendre le chargement de plusieurs éléments à l'aide de Selenium en Python ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-02 22:45:30961parcourir

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

Comment attendre le chargement de plusieurs éléments à l'aide de Selenium en Python

Lorsque vous travaillez avec des éléments Web dynamiques qui se chargent de manière asynchrone via AJAX, cela devient Il est essentiel de s'assurer que les éléments sont complètement chargés avant d'effectuer toute action sur eux. Cet article propose plusieurs méthodes pour attendre le chargement de plusieurs éléments à l'aide de Selenium en Python.

Utilisation de WebDriverWait avec une condition personnalisée

Une approche consiste à créer une condition d'attente personnalisée à l'aide de l'option Classe WebDriverWait. Dans cette condition, vous vérifiez si le nombre d'éléments correspondant à un sélecteur spécifique dépasse un seuil spécifié. Par exemple :

<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>

Utilisation de WebDriverWait avec Visibility_of_All_Elements_Located

Cette approche utilise la condition attendue visibilité_of_all_elements_located() intégrée pour attendre que tous les éléments correspondant à un localisateur spécifié soient visible. Par exemple :

<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>

Utilisation de la fonction Lambda

Si vous devez attendre le chargement d'un nombre spécifique d'éléments, vous pouvez utiliser une fonction lambda avec WebDriverWait. Par exemple, pour attendre 10 éléments :

<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>

En attente des éléments enfants

Pour attendre les éléments enfants d'un élément parent spécifique, vous pouvez utiliser le .find_element_by_... sur l'élément parent, puis appliquez les techniques d'attente ci-dessus à l'élément enfant.

Références

  • [ Documentation Selenium Python](https://selenium-python.readthedocs.io/waits.html)
  • [Comment attendre le chargement d'un nombre spécifique d'éléments à l'aide de Selenium et Python](https://stackoverflow .com/questions/58851190/how-to-wait-for-number-of-elements-to-be-loaded-using-selenium-and-python)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn