python selenium headless chromedriver在前一天工作时未加载整页,并且代码未更改

python selenium headless chromedriver not loading full page when it was working the day before with no changes to the code

我正在python 3.7.2上使用Selenium从9gag中为学校项目报废。

我在MacOS上运行Chrome 80.0.3987.122。
我的chromedriver版本是为版本80提供的版本。
以下代码是我使用驱动程序的方式:

1
2
3
4
5
6
7
8
9
10
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。

我知道这不是网站的问题,因为我再次使用无头firefox驱动程序和无头chrome驱动程序尝试了此操作,并且一切正常。

据我所知,驱动程序未显示任何错误。

我第一嫌疑人是铬。我认为可能是某种方式进行了更新,selenium或驱动程序不知道如何处理。我真的需要使用headless,因为没有它,我将不得不专注于Chrome窗口(这可能是mac的问题,但仍然如此)。

有人遇到过这种行为吗?

更新

我看到只有在访问特定类别(例如https://9gag.com/funny)时,我的问题才会发生。所以我从那里保存输出并将其加载到chrome上,并得到以下内容:click

似乎无头的chrome掉进了验证码,无法继续加载页面。这怎么可能现在才刚刚开始发生,并且有什么事情可以做?我们如何才能解释用于firefox的geckodriver以某种方式克服了这一问题(它有其自身的问题,但至少会加载页面)?


您可以尝试将这两个标志添加到您的选项中。第一个会显示,因此javascript中的" navigator.webdriver = true "变量不会显示。网站可以访问该变量,以检查您是否使用了自动化功能并阻止了您或让您解决了验证码。

下一个是用户代理。继续并将其设置为看起来合法的内容。

1
2
options.add_argument('disable-blink-features=AutomationControlled')
options.add_argument('user-agent=Type user agent here')

希望这会有所帮助。