¿Cómo puedo desplazarme por una página web usando Selenium webdriver en Python?
Actualmente estoy usando Selenium webdriver para analizar la página de amigos de los usuarios de Facebook y extraer todos los identificadores del script AJAX. Pero necesito desplazarme hacia abajo para encontrar todos los amigos. ¿Cómo puedo desplazarme hacia abajo en Selenium? Estoy usando 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 el final de la página.
Si desea desplazarse a una página con carga infinita , como las de 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
Otro método (gracias a Juanse) es seleccionar un objeto y
label.sendKeys(Keys.PAGE_DOWN);
Si desea desplazarse hacia abajo hasta el final de una 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
Puede utilizar send_keys
para simular una pulsación de tecla END
(oPAGE_DOWN
) (que normalmente desplaza la página):
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
html = driver.find_element(By.TAG_NAME, 'html')
html.send_keys(Keys.END)
El mismo método que 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 era visible.