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 garantir 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() :
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]")
)
)
En attente d'un nombre spécifique d'éléments :
Si vous devez attendre le chargement d'un nombre spécifique d'éléments, vous pouvez utiliser une fonction lambda avec les ExpectedConditions classe :
WebDriverWait(driver, 20).until(
lambda driver: len(driver.find_elements_by_xpath(selector)) > int(myLength)
)
XPath pour les éléments enfants :
Pour attendre des éléments enfants dans un élément parent, plutôt que de rechercher dans l'ensemble du DOM, vous pouvez utiliser des expressions XPath :
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_')]")
)
)
Conditions d'attente personnalisées :
Si vous préférez créer votre propre condition d'attente, vous pouvez définir une sous-classe de webdriver.support.ui.ExpectedCondition :
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
WebDriverWait(driver, 30).until(MoreThanOne('li'))
Prévention de la perte d'éléments dans DOM :
Pour éviter de perdre l'élément actuel après une opération de recherche, stockez-le dans une variable avant d'effectuer l'attente :
element = driver.find_element_by_css_selector('ul')
WebDriverWait(element, 30).until(MoreThanOne('li'))
Conclusion :
Ces techniques fournissent un moyen flexible et robuste d'attendre le chargement de plusieurs éléments dans le sélénium. En fonction de vos besoins, choisissez l'approche la mieux adaptée à votre cas d'utilisation.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3