es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La propiedad “page_source” de Selenium no refleja los cambios en HTML después de hacer clic.

El título es bastante claro. Hago clic en un botón utilizando Selenium que carga un texto que estoy tratando de extraer y cuando inspecciono el elemento, puedo encontrar lo que estoy buscando. Sin embargo, sin importar cuánto espere, al volcar .pagesource o hacer driver.executescript(“return document.documentElement.outerHTML”) (como se sugiere aquí y aquí), no se reflejan los cambios en el HTML.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución: Uso de Esperas Explícitas

    Cuando interactuamos con páginas web dinámicas que cargan contenido de forma asíncrona, es importante darle tiempo suficiente a la página para que termine de cargar antes de hacer scraping. Una forma de lograr esto es utilizando esperas explícitas, las cuales instruyen a Selenium a esperar a que ocurra una condición específica antes de continuar con el script.

    Aquí tienes un ejemplo de cómo usar una espera explícita para hacer scraping de un texto que se carga al hacer clic en un botón:

    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    # Navegar a la página y hacer clic en el botón para cargar el texto
    button = driver.find_element_by_xpath("//button[contains(text(),'Cargar Texto')]")
    button.click()
    
    # Esperar a que el texto se cargue esperando la presencia del elemento
    elemento = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//div[@id='text-container']"))
    )
    
    # Hacer scraping del texto una vez que se haya cargado
    texto = elemento.text
    

    En este ejemplo, primero localizamos y hacemos clic en el botón que carga el texto. Luego utilizamos una espera explícita para esperar a la presencia del elemento del contenedor de texto, lo cual indica que el texto ha terminado de cargarse. Finalmente, hacemos scraping del texto desde el elemento utilizando el atributo text.

    Al utilizar esperas explícitas, podemos asegurarnos de que nuestro script haga scraping del HTML únicamente cuando haya terminado de cargar todo el contenido dinámico, incluso si la página tarda mucho tiempo en cargar.

Comments are closed.