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

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

DDD
Libérer: 2024-10-30 00:52:02
original
841 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion
<code class="python">WebDriverWait(driver, 30).until(MoreThanOne('li'))</code>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal