首页 > 解决方案 > driver.get() 在无头模式下停止工作(Chrome)

问题描述

最近我制作的一个刮刀停止在无头模式下工作。我已经尝试过Firefox和Chrome。值得注意的是,我正在使用它seleniumwire来访问 API 请求,并且我正在使用它ChromeDriverManager来获取驱动程序。当前版本为Chrome/93.0.4577.63.

我已经尝试手动修改用户代理,如下面的代码所示,以防网站添加了一些检查阻止HeadlessChrome/93.0.4577.63,即原始用户代理。这没有帮助。

在常规模式下运行脚本时,它可以工作。在无头模式下运行时,以下代码将输出不返回任何请求的[]含义。driver.get(url)我每天运行这段代码,我想它在 8.9.2021 白天停止工作。

from selenium.webdriver.chrome.options import Options as chromeOptions
from seleniumwire import webdriver
from webdriver_manager.chrome import ChromeDriverManager

options = {
'suppress_connection_errors': False,
'connection_timeout': None
}

chrome_options = chromeOptions()
chrome_options.add_argument("--start-maximized")
chrome_options.add_argument("--incognito")
chrome_options.add_argument('--log-level=2')
chrome_options.add_argument("--window-size=1920,1080")
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument('--allow-running-insecure-content')
chrome_options.add_argument('--headless')

driver = webdriver.Chrome(ChromeDriverManager().install(), seleniumwire_options=options, chrome_options=chrome_options)

userAgent = driver.execute_script("return navigator.userAgent;")
userAgent = userAgent.replace('Headless', '')
driver.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent": userAgent})

url = 'my URL goes here'
driver.get(url)
print(driver.requests)

与 FireFox 相同的问题,无头不起作用,但常规浏览可以。知道什么可能导致这个问题,什么可以解决它?我还尝试将以下参数添加到 Chrome 选项中,但没有任何运气:

chrome_options.add_argument("--proxy-server='direct://'")
chrome_options.add_argument("--proxy-bypass-list=*")
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--ignore-certificate-errors')
chrome_options.add_argument('--headless')
chrome_options.add_argument('--ignore-certificate-errors-spki-list')
chrome_options.add_argument('--ignore-ssl-errors')

标签: pythonseleniumselenium-webdriverheadlessseleniumwire

解决方案


这可能已经解决 - 我注意到我首先将窗口大小设置为最大化,然后将其设置为 1920,1080。当我删除参数以最大化 问题时chrome_options.add_argument("--start-maximized"),问题消失了,现在脚本再次工作。

我不确定这是否真的解决了它或者是否是其他问题,因为 Selenium 有点挑剔,有时数据不会以相同的方式加载到同一个网页,但至少现在它可以工作。


推荐阅读