Python Selenium: garantindo o carregamento de vários elementos
Ao lidar com elementos carregados dinamicamente via AJAX, pode ser um desafio confirmar sua aparência. Para lidar com esse cenário, utilizaremos o WebDriverWait do Selenium e suas diversas estratégias para garantir a presença de vários elementos.
Visibilidade de todos os elementos:
Para verificar a visibilidade de todos os elementos que correspondem a um seletor específico, podemos empregar a condição visibilidade_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]")
)
)
Aguardando um número específico de elementos:
Se precisar aguardar o carregamento de um número específico de elementos, você pode usar uma função lambda com ExpectedConditions classe:
WebDriverWait(driver, 20).until(
lambda driver: len(driver.find_elements_by_xpath(selector)) > int(myLength)
)
XPath para elementos filhos:
Para esperar por elementos filhos dentro de um elemento pai, em vez de pesquisar o DOM inteiro, você pode utilizar expressões 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_')]")
)
)
Condições de espera personalizadas:
Se preferir criar sua própria condição de espera, você pode definir uma subclasse 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'))
Prevenção de perda de elemento no DOM:
Para evitar a perda do elemento atual após uma operação de localização, armazene-o em uma variável antes de realizar a espera:
element = driver.find_element_by_css_selector('ul')
WebDriverWait(element, 30).until(MoreThanOne('li'))
Conclusão:
Essas técnicas fornecem uma maneira flexível e robusta de aguardar o carregamento de vários elementos no Selenium. Dependendo dos seus requisitos, escolha a abordagem que melhor se adapta ao seu caso de uso.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3