Selenium Chrome 网络驱动程序在网页上不一致地执行 JS 脚本

Selenium Chrome web driver inconsistently executes JS scripts on webpages

我正在尝试抓取 PubChem 上的文章,例如 this one。 PubChem 要求浏览器启用 Javascript,否则它会重定向到一个几乎没有内容 "This application requires Javascript. Please turn on Javascript in order to use this application" 的页面。为了解决这个问题,我使用了 Selenium 库中的 Chrome 网络驱动程序来获取 PubChem 使用 JavaScript.

生成的 HTML

大约有一半的时间是这样做的。它还经常不呈现完整的 html,并重定向到 Javascript 警告页面。如何使脚本一致地检索网站的 JS 版本?

我也尝试通过使用 PhantomJS 来解决这个问题,除了 PhantomJS 在安装后无法在我的机器上运行。

from bs4 import BeautifulSoup
from requests import get
from requests_html import HTMLSession
from selenium import webdriver
import html5lib

session = HTMLSession()
browser = webdriver.Chrome('/Users/user/Documents/chromedriver')
url = "https://pubchem.ncbi.nlm.nih.gov/compound/"
browser.get(url)
innerHTML = browser.execute_script("return document.body.innerHTML")
soup = BeautifulSoup(innerHTML, "html5lib")

没有任何错误消息。唯一的问题是有时网络爬虫无法按预期获取 JS 渲染的网页。非常感谢!

回答我自己的问题,因为为什么不。

您需要通过

退出浏览器
browser = webdriver.Chrome('/Users/user/Documents/chromedriver')
# stuff
browser.quit()

并在涉及浏览器的最后一个操作之后立即执行此操作,因为浏览器缓存可能会影响您在 运行 脚本的下一次迭代中的输出。

希望对遇到此问题的人有所帮助!

更新编辑:

所以关闭浏览器确实增加了成功的频率,但并不能使它始终如一。另一件有助于使其更频繁地工作的事情是 运行

sudo purge

在终端中。但是,我仍然没有得到一致的结果。如果有人知道如何在不使用蛮力的情况下做到这一点(即打开和关闭 WebDriver 直到它呈现正确的页面),请告诉我!非常感谢