Maison  >  Article  >  développement back-end  >  Comment garantir le chargement de plusieurs éléments dans Python Selenium ?

Comment garantir le chargement de plusieurs éléments dans Python Selenium ?

DDD
DDDoriginal
2024-10-30 00:52:02753parcourir

How to Ensure Multiple Elements Load in Python Selenium?

Python Selenium : assurer le chargement de plusieurs éléments

Lorsque vous traitez des éléments chargés dynamiquement via AJAX, il peut être difficile de confirmer leur apparence. Pour gérer ce scénario, nous utiliserons WebDriverWait de Selenium et ses différentes stratégies pour assurer la présence de plusieurs éléments.

Visibilité de tous les éléments :

Pour vérifier la visibilité de tous les éléments correspondant à un sélecteur spécifique, nous pouvons utiliser la condition visibilité_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>

En attente d'un nombre spécifique d'éléments :

Si vous devez attendre pour un nombre spécifique d'éléments à charger, vous pouvez utiliser une fonction lambda avec la classe ExpectedConditions :

<code class="python">WebDriverWait(driver, 20).until(
    lambda driver: len(driver.find_elements_by_xpath(selector)) > int(myLength)
)</code>

XPath pour les éléments enfants :

Pour attendre l'enfant éléments au sein d'un élément parent, plutôt que de rechercher dans l'ensemble du DOM, vous pouvez utiliser des expressions 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>

Conditions d'attente personnalisées :

Si vous préférez créer les vôtres condition d'attente, vous pouvez définir une sous-classe de 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>

Prévention de la perte d'éléments dans le DOM :

Pour éviter perdant l'élément courant après une opération de recherche, stockez-le dans une variable avant d'effectuer l'attente :

<code class="python">element = driver.find_element_by_css_selector('ul')
WebDriverWait(element, 30).until(MoreThanOne('li'))</code>

Conclusion :

Ces techniques offrent une manière flexible et robuste attendre le chargement de plusieurs éléments dans Selenium. En fonction de vos besoins, choisissez l'approche qui convient le mieux à votre cas d'utilisation.

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