Actualmente estoy usando selenium webdriver para analizar la página de amigos del usuario de Facebook y extraer todos los identificadores del script AJAX. Pero necesito desplazarme hacia abajo para ver a 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 al final de la página.
Si desea desplazarse a una página con carga infinita , como las de las 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 la parte inferior 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 la pulsación de una tecla END
(o PAGE_DOWN
) (que normalmente desplaza la página):
from selenium.webdriver.common.keys import Keys
html = driver.find_element_by_tag_name('html')
html.send_keys(Keys.END)
element=find_element_by_xpath("xpath of the li you are trying to access")
element.location_once_scrolled_into_view
esto ayudó cuando intentaba acceder a un 'li' que no era visible.
Para mi propósito, quería desplazarme más hacia abajo, teniendo en cuenta la posición de las ventanas. Mi solución fue similar y se usówindow.scrollY
driver.execute_script("window.scrollTo(0, window.scrollY + 200)")
que irá a la posición actual de desplazamiento y + 200
Así es como se desplaza hacia abajo en la página web:
driver.execute_script("window.scrollTo(0, 1000);")
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 encontré después de muchas pruebas 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
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!
Cuando trabaje con youtube, los elementos flotantes dan el valor "0" como altura de desplazamiento, así 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
Estaba buscando una forma de desplazarse por una página web dinámica y detenerme automáticamente una vez que se alcanza el final de la página, y encontré este hilo.
La publicación de @Cuong Tran , con una modificación principal, fue la respuesta que estaba buscando. Pensé que otros podrían encontrar útil la modificación (tiene un efecto pronunciado en cómo funciona el código), de ahí esta publicación.
La modificación consiste en mover la declaración que captura la altura de la última página dentro del bucle (para que cada verificación se compare con la altura de la página anterior).
Entonces, el código a continuación:
Se desplaza continuamente hacia abajo en una página web dinámica (
.scrollTo()
), y solo se detiene cuando, durante una iteración, la altura de la página permanece igual.
(Hay otra modificación, donde la declaración 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
Este código se desplaza hasta la parte inferior, pero no requiere que espere cada vez. Se desplazará continuamente y luego se detendrá en la parte inferior (o el tiempo de espera)
from selenium import webdriver
import time
driver = webdriver.Chrome(executable_path='chromedriver.exe')
driver.get('https://example.com')
pre_scroll_height = driver.execute_script('return document.body.scrollHeight;')
run_time, max_run_time = 0, 1
while True:
iteration_start = time.time()
# Scroll webpage, the 100 allows for a more 'aggressive' scroll
driver.execute_script('window.scrollTo(0, 100*document.body.scrollHeight);')
post_scroll_height = driver.execute_script('return document.body.scrollHeight;')
scrolled = post_scroll_height != pre_scroll_height
timed_out = run_time >= max_run_time
if scrolled:
run_time = 0
pre_scroll_height = post_scroll_height
elif not scrolled and not timed_out:
run_time += time.time() - iteration_start
elif not scrolled and timed_out:
break
# closing the driver is optional
driver.close()
Esto es mucho más rápido que esperar entre 0,5 y 3 segundos cada vez para obtener una respuesta, cuando esa respuesta podría tardar 0,1 segundos.
desplazarse cargando páginas. Ejemplo: medio, quora, etc.
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight-1000);")
# Wait to load the page.
driver.implicitly_wait(30) # seconds
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break
last_height = new_height
# sleep for 30s
driver.implicitly_wait(30) # seconds
driver.quit()
La ScrollTo()
función ya no funciona. Esto es lo que usé y funcionó bien.
driver.execute_script("document.getElementById('mydiv').scrollIntoView();")
si desea desplazarse dentro de una vista / marco en particular (WebElement), lo que sólo necesita hacer es reemplazar "cuerpo" con un elemento en particular en el que desea desplazarse. obtengo ese elemento a través de "getElementById" en el siguiente ejemplo:
self.driver.execute_script('window.scrollTo(0, document.getElementById("page-manager").scrollHeight);')
este es el caso de YouTube , por ejemplo ...
Aquí hay un fragmento de código de selenio de ejemplo que puede usar para este tipo de propósito. Va a la URL de los resultados de búsqueda de YouTube en 'Enumerar el tutorial de Python' y se desplaza hacia abajo hasta encontrar el video con el título: 'Enumerar el tutorial de Python (2020)'.
driver.get('https://www.youtube.com/results?search_query=enumerate+python')
target = driver.find_element_by_link_text('Enumerate python tutorial(2020).')
target.location_once_scrolled_into_view
driver.execute_script("document.getElementById('your ID Element').scrollIntoView();")
está funcionando para mi caso.
Puede usar send_keys para simular la pulsación de una tecla PAGE_DOWN (que normalmente desplaza la página):
from selenium.webdriver.common.keys import Keys
html = driver.find_element_by_tag_name('html')
html.send_keys(Keys.PAGE_DOWN)
La estrella de HGTV, Christina Hall, revela que le diagnosticaron envenenamiento por mercurio y plomo, probablemente debido a su trabajo como manipuladora de casas.
Recientemente salió a la luz un informe policial que acusa a la estrella de 'Love Is Blind', Brennon, de violencia doméstica. Ahora, Brennon ha respondido a los reclamos.
Conozca cómo Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia mientras organizaba la primera celebración de Acción de Gracias desde que murió su madre, Naomi Judd.
Descubra por qué un destacado experto en lenguaje corporal cree que es fácil trazar "tales paralelismos" entre la princesa Kate Middleton y la princesa Diana.
Los inodoros arrojan columnas de aerosol invisibles con cada descarga. ¿Como sabemos? La prueba fue capturada por láseres de alta potencia.
Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?
The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!
¿Sigue siendo efectivo ese lote de repelente de insectos que te quedó del verano pasado? Si es así, ¿por cuánto tiempo?
Anteriormente, Kotaku informó que un hotel Godzilla se estaba abriendo en Tokio este abril. Junto al hotel, estaba programada la aparición de una enorme cabeza de 'Zilla, pero todo lo que hemos visto fueron imágenes conceptuales computarizadas.
Foto: Getty Desde que lanzó The Boring Company hace un año, Elon Musk ha mencionado varios sitios de construcción posibles para el negocio de perforación de túneles y ha descartado una vaga referencia a una aprobación gubernamental "verbal" para un túnel Hyperloop que conecta la ciudad de Nueva York y Washington. , CC. Pero ahora sabemos que al menos un alcalde quiere que Musk perfore un agujero debajo de su ciudad.
Tapas elásticas de silicona de Tomorrow's Kitchen, paquete de 12 | $14 | Amazonas | Código promocional 20OFFKINJALids son básicamente los calcetines de la cocina; siempre perdiéndose, dejando contenedores huérfanos que nunca podrán volver a cerrarse. Pero, ¿y si sus tapas pudieran estirarse y adaptarse a todos los recipientes, ollas, sartenes e incluso frutas en rodajas grandes que sobran? Nunca más tendrás que preocuparte por perder esa tapa tan específica.
Hemos pirateado algunas ciudades industriales en esta columna, como Los Ángeles y Las Vegas. Ahora es el momento de una ciudad militar-industrial-compleja.
El equipo está a la espera de las medallas que ganó en los Juegos Olímpicos de Invierno de 2022 en Beijing, ya que se está resolviendo un caso de dopaje que involucra a la patinadora artística rusa Kamila Valieva.
Miles de compradores de Amazon recomiendan la funda de almohada de seda Mulberry, y está a la venta en este momento. La funda de almohada de seda viene en varios colores y ayuda a mantener el cabello suave y la piel clara. Compre las fundas de almohada de seda mientras tienen hasta un 46 por ciento de descuento en Amazon
El jueves se presentó una denuncia de delito menor amenazante agravado contra Joe Mixon.
El Departamento de Policía de Lafayette comenzó a investigar a un profesor de la Universidad de Purdue en diciembre después de recibir varias denuncias de un "hombre sospechoso que se acercaba a una mujer".
Al igual que el mundo que nos rodea, el lenguaje siempre está cambiando. Mientras que en eras anteriores los cambios en el idioma ocurrían durante años o incluso décadas, ahora pueden ocurrir en cuestión de días o incluso horas.
Estoy de vuelta por primera vez en seis años. No puedo decirte cuánto tiempo he estado esperando esto.
“And a river went out of Eden to water the garden, and from thence it was parted and became into four heads” Genesis 2:10. ? The heart is located in the middle of the thoracic cavity, pointing eastward.
Creo, un poco tarde en la vida, en dar oportunidades a la gente. Generosamente.