【发布时间】:2016-10-18 02:17:38
【问题描述】:
我正在尝试抓取一个网站进行研究,但我被卡住了。我希望刮板读取页面源,并将其附加到本地 HTML 文件中,以便我可以在校外分析数据。我已经尝试过BeautifulSoup 和Scrapy,但我发现我需要使用Selenium 与页面交互才能浏览我大学的身份验证系统。 (我不包括该代码,因为它与我的问题无关。)
当我运行脚本时,它会导航到页面并单击链接,但它只保存第一页的 HTML。然后,每次单击链接时,它都会复制并附加该页面的 HTML。
如何使用Selenium 点击下一页链接、抓取 HTML 并保存到文件,直到到达最后一页?
source = driver.page_source
while True:
with open("test.html", "a") as TestFile:
TestFile.write(source)
try:
driver.implicitly_wait(200)
driver.find_element_by_css_selector('li.next').click()
except AttributeError:
break
编辑:我将 AttributeError 添加到 except 并收到以下错误。
selenium.common.exceptions.StaleElementReferenceException:消息: 过时的元素引用:元素未附加到页面文档
我的假设是我需要放慢 .click() 的速度,这就是我最初有隐式等待的原因,但这似乎没有奏效。
【问题讨论】:
-
摆脱你的裸体除了,你会得到一个更丰富的错误信息
-
谢谢n1c9,我在except中添加了一个AttributeError,它给了我上面添加的错误代码:StaleElementReferenceException。
-
页面上是否有任何弹出窗口或类似内容?还是像往常一样翻到下一页?另外,
implicitly_wait(num)应该在初始化 webdriver 时设置,但这只是一种风格。 -
它会像往常一样翻阅页面,直到到达第 8 或第 9 页,然后它会抛出过时元素异常。