【问题标题】:Page scrolling using Selenium is not working使用 Selenium 的页面滚动不起作用
【发布时间】:2017-09-27 03:37:55
【问题描述】:

我需要一条推文的所有回复/cmets。相关的question 有一个答案,需要下载太多数据,然后在交叉匹配后丢弃它们,由于速率限制,这对我来说是不可能的。 我试图通过首先使用 python 加载推文url 来抓取页面。为了滚动页面,我尝试使用 selenium web 驱动程序。但我仍然只在第一页得到回复。由于某种原因,滚动不起作用。我尝试了这些1234 方法,但在这种情况下都没有。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Firefox()
driver.get("https://twitter.com/neiltyson/status/912299342559694848")

for in xrange(10):
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    print('height:{}'.format(driver.execute_script("return document.body.scrollHeight")))
    time.sleep(3)

我注意到,高度在第一次迭代后没有改变。

【问题讨论】:

  • 是分页还是无限滚动?你能分享一个关于你的具体问题的最小、完整和可验证的例子吗?
  • @ivan7707,我尝试按照另一个 SO 问题中的建议无限滚动,但它永远不会完成!滚动重复次数不同,我得到相同的结果。我猜滚动不起作用,因为 cmets 已加载到页面的另一个正文中?
  • 感谢您更新问题。请参阅下面的答案。

标签: python selenium-webdriver twitter web-scraping


【解决方案1】:

我现在正在运行 Python3,所以我将 xrange 更改为 range 以对其进行测试。

试试这个(对我有用):

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Firefox()
driver.get("https://twitter.com/neiltyson/status/912299342559694848")

page = driver.find_element_by_tag_name('body')

for i in range(10):
    page.send_keys(Keys.PAGE_DOWN)
    time.sleep(3)

【讨论】:

  • 谢谢@ivan7707。它确实可以滚动。但几次之后,推特停止提供下一个回复。如果我将页面保存为 html 文件并在浏览器中打开,我会看到错误消息“加载似乎需要一段时间。Twitter 可能容量过大或遇到短暂的打嗝。”。我怎样才能检测到它?当它发生时,再试一次?我试图增加睡眠时间,但没有帮助。
  • 这是一个完全不同的问题and a twitter issue it seems。上面的代码滚动了我在范围内输入的次数(回答你的初始问题)并且没有问题。
  • 这个问题也被否决了。我想有些人投反对票很有趣。
  • 我同意。有些人只是投反对票。我发现这个问题和建议非常有帮助,不得不自己处理。感谢所有花时间回复和提供建议的人。总会有一些巨魔或忘恩负义的人。
猜你喜欢
  • 2016-05-30
  • 2016-09-11
  • 1970-01-01
  • 2013-10-30
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
  • 2017-01-31
  • 2021-12-05
相关资源
最近更新 更多