Quiero raspar todos los datos de una página implementada por un scroll infinito. El siguiente código de Python funciona.
for i in range(100):
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(5)
Esto significa que cada vez que me desplazo hacia abajo, necesito esperar 5 segundos, lo que generalmente es suficiente para que la página termine de cargar los contenidos recién generados. Pero, esto puede no ser eficiente en el tiempo. La página puede terminar de cargar el nuevo contenido en 5 segundos. ¿Cómo puedo detectar si la página terminó de cargar los nuevos contenidos cada vez que me desplazo hacia abajo? Si puedo detectar esto, puedo desplazarme hacia abajo nuevamente para ver más contenido una vez que sepa que la página terminó de cargarse. Esto es más eficiente en el tiempo.
El webdriver
esperará a que se cargue una página de forma predeterminada mediante el .get()
método.
Como puede estar buscando algún elemento específico como dijo @ user227215, debe usar WebDriverWait
para esperar un elemento ubicado en su página:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
browser = webdriver.Firefox()
browser.get("url")
delay = 3 # seconds
try:
myElem = WebDriverWait(browser, delay).until(EC.presence_of_element_located((By.ID, 'IdOfMyElement')))
print "Page is ready!"
except TimeoutException:
print "Loading took too much time!"
Lo he usado para verificar alertas. Puede utilizar cualquier otro método de tipo para encontrar el localizador.
EDITAR 1:
Debo mencionar que webdriver
esperará a que se cargue una página de forma predeterminada. No espera a que se carguen dentro de los marcos ni a las solicitudes ajax. Significa que cuando lo use .get('url')
, su navegador esperará hasta que la página esté completamente cargada y luego irá al siguiente comando en el código. Pero cuando está publicando una solicitud ajax, webdriver
no espere y es su responsabilidad esperar una cantidad de tiempo adecuada para que se cargue la página o una parte de la página; entonces hay un módulo llamado expected_conditions
.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras