Intentar usar Python y Selenium para desplazar y raspar una página web de forma iterativa

Hace poco hice una pregunta (a la que se hace referencia aquí: Python Web Scraping (Beautiful Soup, Selenium and PhantomJS): solo parte de la página completa ) que ayudó a identificar un problema que tuve al raspar todo el contenido de una página que se actualiza dinámicamente cuando uno se desplaza. . Sin embargo, todavía no puedo cambiar mi código para señalar el elemento correcto utilizando selenium y desplazarme hacia abajo en la página de forma iterativa. También encontré que, cuando me desplazo manualmente hacia abajo en la página en cuestión, parte del contenido original cuando la página cargada desaparece mientras se actualiza el nuevo contenido. Por ejemplo, mira la imagen de abajo …

introduzca la descripción de la imagen aquí He apuntado al contenedor con los datos que estoy tratando de rastrear a continuación (resaltados en azul).

En primer lugar, tengo problemas para seleccionar el elemento correcto para desplazarme hacia abajo en la página, ya que nunca he tenido que hacer esto antes. Creo que tendría que usar selenium para apuntar al contenedor y luego usar la función “execute_script” para luego desplazarme hacia abajo en la página porque esta tabla está incrustada dentro del cuerpo de la página web. Sin embargo, parece que no puedo hacer que eso funcione.

scroll = driver.find_element_by_class_name("ag-body-viewport") driver.execute_script("arguments[0].scrollIntoView();", scroll) 

En segundo lugar, una vez que tenga la capacidad de desplazarme, tendré que desplazarme hacia abajo poco a poco y raspar de forma iterativa. Lo que quiero decir es que, si te fijas en la imagen, verás un montón de tags ‘div’ dentro de la

Por ejemplo … cuando la página se carga y paso el html a Beautifulsoup. Puedo raspar las primeras 40 filas. Si me desplazo hacia abajo, digamos 40 filas, luego pasaré la fila 40 – 80 a beautifulsoup y las filas 1 – 40 ya no estarán disponibles ya que los datos se actualizaron dinámicamente …

En pocas palabras, lo que quiero es poder raspar todo el contenido de la imagen que se proporciona, luego usar selenium para desplazarse por aproximadamente 40 filas, raspar las siguientes 40, luego desplazarse hacia abajo y raspar las siguientes 40 y así sucesivamente … Cualquier consejos sobre cómo hacer que el selenium se desplace en este contenedor incrustado y cómo se haría para desplazarse hacia abajo de manera iterativa para capturar todos los datos en el contenedor cuando se actualiza dinámicamente a medida que se desplaza. Cualquier ayuda extra será muy apreciada.

Por lo que veo en la captura de pantalla, parece que necesita desplazarse iterativamente hacia la vista de la última fila de la tabla , el último elemento con clase ag-row :

 import time while True: rows = driver.find_elements_by_css_selector("tr.ag-row") driver.execute_script("arguments[0].scrollIntoView();", rows[-1]) time.sleep(1) # TODO: collect the rows 

También necesitaría averiguar la condición de salida del bucle.