Estaba buscando una manera de desplazarme por una página web dinámica y detenerme automáticamente una vez que se llega al 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 sobre cómo funciona el código), de ahí esta publicación.
La modificación consiste en mover la declaración que captura la última altura de la 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:
Desplaza continuamente hacia abajo una página web dinámica ( .scrollTo()
), solo se detiene cuando, para 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