python - 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')
解决方案
这可能已经解决 - 我注意到我首先将窗口大小设置为最大化,然后将其设置为 1920,1080。当我删除参数以最大化
问题时chrome_options.add_argument("--start-maximized")
,问题消失了,现在脚本再次工作。
我不确定这是否真的解决了它或者是否是其他问题,因为 Selenium 有点挑剔,有时数据不会以相同的方式加载到同一个网页,但至少现在它可以工作。
推荐阅读
- python - PyAudio 实时录制和回放
- r - R有一个函数创建一个数据框,其中部分数据作为名称的一部分传入
- jquery - 是否可以在数据表服务器端实现单个列搜索?
- php - PHP 8 发生了什么变化,导致 imap_msgno() 在昨天与 PHP 7.4.12 完美配合时声称“错误消息编号”?
- ansible - 在 dict 的 ansible 列表中添加新属性
- javascript - 如何在 Node.js 中直接将缓冲区写入 websocket-stream 而无需转换为字符串?
- php - 使用 Mailgun API 在 Laravel 8 中未发送电子邮件
- regex - shell脚本中使用正则表达式的问题
- python - TypeError: only size-1 arrays can be convert to Python scalars when running Keras Conv1D with CSV file
- java - 如何为 AAAABBB 和 AAABBCC 等数字模式创建正则表达式模式