我在 python 3.7.2 上使用 Selenium 到 刮 来自 9gag用于学校项目。
我在 MacOS 上运行 chrome 80.0.3987.122。
我的 chromedriver 版本是为 80 版提供的版本。
下面的代码是我如何使用我的驱动程序:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options as c_opt
options = c_opt()
options.headless = True
driver = webdriver.Chrome(executable_path=PATH_TO_DRIVER, chrome_options=options)
driver.get('https://www.9gag.com'))
with open('source.html', 'w') as f:
f.write(driver.page_source)
昨天一切正常。我会运行此代码并打开源文件并查看前几篇 9gag 文章。从今天早上开始,我的源结果显示了一个加载图形,好像它没有完成加载 javascript。我知道这不是网站的问题,因为我再次尝试使用 headless Firefox 驱动程序和非 headless chrome 驱动程序,一切都按预期工作。
据我所知,驱动程序没有显示任何错误。
我的第一嫌疑人是 Chrome 。我想也许它以某种方式更新了,而 selenium 或驱动程序不知道如何处理它。我真的需要使用 headless ,因为没有它我被迫专注于 chrome 窗口(这可能是 mac 问题,但仍然如此)。
有没有人遇到过这种行为?
更新
我发现只有在访问特定类别时才会出现我的问题,例如 https://9gag.com/funny .所以我从那里保存了输出并将其加载到 chrome 上并得到以下结果:
似乎 headless chrome 陷入了验证码,无法继续加载页面。这怎么可能现在才开始发生,有什么可以做的吗?我们如何解释 firefox 的 geckodriver 以某种方式克服了这个问题(它有自己的问题,但至少它加载了页面)?
最佳答案
您可以尝试将这 2 个标志添加到您的选项中。第一个将使 javascript 中的“navigator.webdriver=true”变量不显示。站点可以访问该变量以检查您是否使用自动化并阻止您或让您解决验证码。
下一个是用户代理。继续并将其设置为看起来合法的东西。
options.add_argument('disable-blink-features=AutomationControlled')
options.add_argument('user-agent=Type user agent here')
希望这会有所帮助。
关于python selenium headless chromedriver在前一天工作时没有加载整页,代码没有改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60415144/