gpt4 book ai didi

python - Selenium Chrome Web 驱动程序在网页上执行 JS 脚本不一致

转载 作者:太空宇宙 更新时间:2023-11-03 20:25:17 25 4
gpt4 key购买 nike

我正在尝试抓取 PubChem 上的文章,例如 this one , 例如。 PubChem 要求浏览器启用 Javascript,否则它会重定向到一个几乎没有内容的页面,其中显示“此应用程序需要 Javascript。请打开 Javascript 才能使用此应用程序”。为了解决这个问题,我使用 Selenium 库中的 Chrome Web 驱动程序来获取 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 直到它呈现正确的页面),请告诉我!非常感谢

关于python - Selenium Chrome Web 驱动程序在网页上执行 JS 脚本不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57873563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com