Faites défiler jusqu'au bas de la page infinie avec PhantomJS en Python
J'ai réussi à obtenir Python de Sélénium et de PhantomJS pour recharger dynamiquement, un chargement infini défilement de la page, comme dans l'exemple ci-dessous. Mais comment cela pourrait-il être modifié, de sorte qu'au lieu de définir un certain nombre de recharge manuellement, le programme s'arrete lorsque l'on atteint le fond de roche?
reloads = 100000 #set the number of times to reload
pause = 0 #initial time interval between reloads
driver = webdriver.PhantomJS()
# Load Twitter page and click to view all results
driver.get(url)
driver.find_element_by_link_text("All").click()
# Keep reloading and pausing to reach the bottom
for _ in range(reloads):
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(pause)
text_file.write(driver.page_source.encode("utf-8"))
text_file.close()
Vous devez vous connecter pour publier un commentaire.
Vous pouvez vérifier si le rouleau n'a rien à chaque étape.
Il utilise un statique attendre montant qui est mauvais parce que vous ne voulez pas attendre inutile quand il se termine plus rapidement et vous ne voulez pas que le script se termine prématurément lors de la charge dynamique est trop lent pour plusieurs raisons.
Depuis une page habituellement en charge de plusieurs éléments dans une liste, vous pouvez vérifier la longueur de la liste avant de la charge et attendre jusqu'à ce que le prochain élément est chargé.
Pour twitter, cela pourrait ressembler à ceci:
J'ai utilisé une expression XPath, parce que PhantomJS 1.x a un bug parfois lors de l'utilisation de
:nth-child()
sélecteurs CSS.Version complète de référence.
return
et déplacé la veille à la bonne position.