"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo garantizar la carga de múltiples elementos en Python Selenium?

¿Cómo garantizar la carga de múltiples elementos en Python Selenium?

Publicado el 2024-11-08
Navegar:357

How to Ensure Multiple Elements Load in Python Selenium?

Python Selenium: garantizar la carga de múltiples elementos

Cuando se trata de elementos cargados dinámicamente a través de AJAX, puede resultar complicado confirmar su apariencia. Para manejar este escenario, utilizaremos WebDriverWait de Selenium y sus diversas estrategias para garantizar la presencia de múltiples elementos.

Visibilidad de todos los elementos:

Para verificar la visibilidad de todos los elementos que coinciden con un selector específico, podemos emplear la condición visibilidad_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]")
    )
)

Esperando un número específico de elementos:

Si necesita esperar a que se cargue un número específico de elementos, puede usar una función lambda con las Condiciones esperadas clase:

WebDriverWait(driver, 20).until(
    lambda driver: len(driver.find_elements_by_xpath(selector)) > int(myLength)
)

XPath para elementos secundarios:

Para esperar elementos secundarios dentro de un elemento principal, en lugar de buscar en todo el DOM, puede utilizar expresiones 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_')]")
    )
)

Condiciones de espera personalizadas:

Si prefiere crear su propia condición de espera, puede definir una subclase 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'))

Prevención de pérdida de elementos en DOM:

Para evitar perder el elemento actual después de una operación de búsqueda, guárdelo en una variable antes de realizar la espera:

element = driver.find_element_by_css_selector('ul')
WebDriverWait(element, 30).until(MoreThanOne('li'))

Conclusión:

Estas técnicas proporcionan una forma flexible y sólida de esperar la carga de múltiples elementos en selenio. Dependiendo de sus requisitos, elija el enfoque que mejor se adapte a su caso de uso.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3