"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como garantir o carregamento de vários elementos no Python Selenium?

Como garantir o carregamento de vários elementos no Python Selenium?

Publicado em 2024-11-08
Navegar:166

How to Ensure Multiple Elements Load in Python Selenium?

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.

Tutorial mais recente Mais>

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