¿Cómo puedo desplazarme por una página web usando el controlador web de selenium en python?

Actualmente estoy usando Selenium webdriver para analizar a través de la página de amigos de los usuarios de Facebook y extraer todas las ID del script AJAX. Pero necesito desplazarme hacia abajo para conseguir todos los amigos. ¿Cómo puedo desplazarme hacia abajo en Selenium. Estoy usando python.

Related of "¿Cómo puedo desplazarme por una página web usando el controlador web de selenium en python?"

Puedes usar

driver.execute_script("window.scrollTo(0, Y)") 

donde Y es la altura (en un monitor fullhd es 1080). (Gracias a @lukeis)

También puedes usar

 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") 

para desplazarse hasta la parte inferior de la página.

Si quieres ir a una página con carga infinita , como redes sociales, facebook, etc. (gracias a @Cuong Tran)

 SCROLL_PAUSE_TIME = 0.5 # Get scroll height last_height = driver.execute_script("return document.body.scrollHeight") while True: # Scroll down to bottom driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") # Wait to load page time.sleep(SCROLL_PAUSE_TIME) # Calculate new scroll height and compare with last scroll height new_height = driver.execute_script("return document.body.scrollHeight") if new_height == last_height: break last_height = new_height 

Si desea desplazarse hacia la parte inferior de la página infinita (como linkedin.com ), puede usar este código:

 SCROLL_PAUSE_TIME = 0.5 # Get scroll height last_height = driver.execute_script("return document.body.scrollHeight") while True: # Scroll down to bottom driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") # Wait to load page time.sleep(SCROLL_PAUSE_TIME) # Calculate new scroll height and compare with last scroll height new_height = driver.execute_script("return document.body.scrollHeight") if new_height == last_height: break last_height = new_height 

Referencia: https://stackoverflow.com/a/28928684/1316860

mismo método como se muestra aquí :

en python puedes usar

 driver.execute_script("window.scrollTo(0, Y)") 

(Y es la posición vertical a la que desea desplazarse)

 element=find_element_by_xpath("xpath of the li you are trying to access") element.location_once_scrolled_into_view 

esto me ayudó cuando intentaba acceder a un ‘li’ que no estaba visible.

 from selenium.webdriver.common.keys import Keys html = browser.find_element_by_tag_name('html') html.send_keys(Keys.END) 

probado, funciona

Ninguna de estas respuestas funcionó para mí, al menos no para desplazarme hacia abajo en una página de resultados de búsqueda de Facebook, pero luego de muchas pruebas encontré esta solución:

 while driver.find_element_by_tag_name('div'): driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") Divs=driver.find_element_by_tag_name('div').text if 'End of Results' in Divs: print 'end' break else: continue 

Así es como se desplaza hacia abajo en la página web:

 driver.execute_script("window.scrollTo(0, 1000);") 

La forma más fácil que encontré para resolver ese problema fue seleccionar una etiqueta y luego enviar:

 label.sendKeys(Keys.PAGE_DOWN); 

¡Espero que funcione!

Para mi propósito, quería desplazarme más abajo, teniendo en cuenta la posición de las ventanas. Mi solución fue similar y usé window.scrollY

 driver.execute_script("window.scrollTo(0, window.scrollY + 200)") 

que irá a la posición actual y desplazamiento + 200

Estaba buscando una forma de desplazarme a través de una página web dinámica, y paré automáticamente una vez que se alcanzó el final de la página, y encontré este hilo.

El mensaje de @Cuong Tran , con una modificación principal, fue la respuesta que estaba buscando. Pensé que a otros les podría resultar útil la modificación (tiene un efecto pronunciado en cómo funciona el código), por lo tanto, esta publicación.

La modificación consiste en mover la statement que captura la última altura de página dentro del bucle (para que cada comprobación se compare con la altura de la página anterior).

Por lo tanto, el siguiente código:

Continuamente se desplaza hacia abajo en una página web dinámica ( .scrollTo() ), solo se detiene cuando, por una iteración, la altura de la página permanece igual.

(Hay otra modificación, donde la statement de ruptura está dentro de otra condición (en caso de que la página se “pegue”) que se puede eliminar).

  SCROLL_PAUSE_TIME = 0.5 while True: # Get scroll height ### This is the difference. Moving this *inside* the loop ### means that it checks if scrollTo is still scrolling last_height = driver.execute_script("return document.body.scrollHeight") # Scroll down to bottom driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") # Wait to load page time.sleep(SCROLL_PAUSE_TIME) # Calculate new scroll height and compare with last scroll height new_height = driver.execute_script("return document.body.scrollHeight") if new_height == last_height: # try again (can be removed) driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") # Wait to load page time.sleep(SCROLL_PAUSE_TIME) # Calculate new scroll height and compare with last scroll height new_height = driver.execute_script("return document.body.scrollHeight") # check if the page height has remained the same if new_height == last_height: # if so, you are done break # if not, move on to the next loop else: last_height = new_height continue 

Cuando trabaje con youtube, los elementos flotantes dan el valor “0” como altura de desplazamiento, por lo que en lugar de usar “return document.body.scrollHeight” intente usar este “return document.documentElement.scrollHeight” ajuste el tiempo de pausa de desplazamiento según su Internet de lo contrario, se ejecutará solo una vez y luego se interrumpirá.

 SCROLL_PAUSE_TIME = 1 # Get scroll height """last_height = driver.execute_script("return document.body.scrollHeight") this dowsnt work due to floating web elements on youtube """ last_height = driver.execute_script("return document.documentElement.scrollHeight") while True: # Scroll down to bottom driver.execute_script("window.scrollTo(0,document.documentElement.scrollHeight);") # Wait to load page time.sleep(SCROLL_PAUSE_TIME) # Calculate new scroll height and compare with last scroll height new_height = driver.execute_script("return document.documentElement.scrollHeight") if new_height == last_height: print("break") break last_height = new_height