在 docker 容器中运行到不正确的 chromedriver 版本
Posted
技术标签:
【中文标题】在 docker 容器中运行到不正确的 chromedriver 版本【英文标题】:Running in to incorrect chromedriver version in docker container 【发布时间】:2021-12-29 22:10:47 【问题描述】:我已经从带有 selenium hub 和 Chrome-node-debug 的主机安装了这个 docker 镜像。直到今天我能够运行我的量角器脚本,但今天突然之间它开始给我以下问题。不知道为什么版本与主机中的驱动程序不匹配。我什至尝试将我的 selenium hub 和 chromedriver 更新到 4.1.0,但错误仍然相同并且没有改变。这个铬从哪里捡起不确定。有人可以帮助我,因为我被困在这个问题上并且无法修复它。
控制台出错。
[22:39:30] W/driverProviders - Using driver provider directConnect, but also found extra driver provider parameter(s): seleniumAddress
[22:39:30] I/launcher - Running 1 instances of WebDriver
[22:39:30] I/direct - Using ChromeDriver directly...
DevTools listening on ws://127.0.0.1:63120/devtools/browser/0571b2db-fa5a-4184-915b-ff0cc9a18948
[1118/223932.776:ERROR:url_util.cc(414)] Invalid pattern javascript://
[22:39:33] E/launcher - session not created: This version of ChromeDriver only supports Chrome version 94
Current browser version is 96.0.4664.45 with binary path C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
(Driver info: chromedriver=94.0.4606.61 (418b78f5838ed0b1c69bb4e51ea0252171854915-refs/branch-heads/4606@#1204),platform=Windows NT 10.0.19043 x86_64)
[22:39:33] E/launcher - SessionNotCreatedError: session not created: This version of ChromeDriver only supports Chrome version 94
Current browser version is 96.0.4664.45 with binary path C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
(Driver info: chromedriver=94.0.4606.61 (418b78f5838ed0b1c69bb4e51ea0252171854915-refs/branch-heads/4606@#1204),platform=Windows NT 10.0.19043 x86_64)
at Object.checkLegacyResponse (C:\Dev\Node\node-v14.18.1-win-x64\node_modules\protractor\node_modules\selenium-webdriver\lib\error.js:546:15)
at parseHttpResponse (C:\Dev\Node\node-v14.18.1-win-x64\node_modules\protractor\node_modules\selenium-webdriver\lib\http.js:509:13)
at C:\Dev\Node\node-v14.18.1-win-x64\node_modules\protractor\node_modules\selenium-webdriver\lib\http.js:441:30
at processTicksAndRejections (internal/process/task_queues.js:95:5)
From: Task: WebDriver.createSession()
at Function.createSession (C:\Dev\Node\node-v14.18.1-win-x64\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver.js:769:24)
at Function.createSession (C:\Dev\Node\node-v14.18.1-win-x64\node_modules\protractor\node_modules\selenium-webdriver\chrome.js:761:15)
at Direct.getNewDriver (C:\Dev\Node\node-v14.18.1-win-x64\node_modules\protractor\built\driverProviders\direct.js:77:33)
at Runner.createBrowser (C:\Dev\Node\node-v14.18.1-win-x64\node_modules\protractor\built\runner.js:195:43)
at C:\Dev\Node\node-v14.18.1-win-x64\node_modules\protractor\built\runner.js:339:29
at _fulfilled (C:\Dev\Node\node-v14.18.1-win-x64\node_modules\protractor\node_modules\q\q.js:834:54)
at C:\Dev\Node\node-v14.18.1-win-x64\node_modules\protractor\node_modules\q\q.js:863:30
at Promise.promise.promiseDispatch (C:\Dev\Node\node-v14.18.1-win-x64\node_modules\protractor\node_modules\q\q.js:796:13)
at C:\Dev\Node\node-v14.18.1-win-x64\node_modules\protractor\node_modules\q\q.js:556:49
at runSingle (C:\Dev\Node\node-v14.18.1-win-x64\node_modules\protractor\node_modules\q\q.js:137:13)
[22:39:33] E/launcher - Process exited with error code 199
Conf.js 文件
let domainName = util.domainName;
exports.config =
seleniumAddress: 'http://localhost:4444/wd/hub', //for local testing
directConnect: true, // Set to true for local testing, or provide a link to a running selenium grid.
// specs: ['e2e/**/*-test.js'],
specs: ['e2e/**/mailbox-test.js'],
capabilities:
browserName: 'chrome',
acceptInsecureCerts: true,
'goog:chromeOptions':
w3c: false,
args: [
'--no-sandbox',
'--headless',
'--disable-gpu',
'--window-size=1200,1200',
'--allow-insecure-localhost',
'--allow-running-insecure-content',
'--ignore_ssl',
'--user-agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/79.0.3945.130 Safari/537.36',
],
,
【问题讨论】:
【参考方案1】:此错误消息...
W/driverProviders - Using driver provider directConnect, but also found extra driver provider parameter(s): seleniumAddress
...暗示有两个选项可用,并且这两个选项都已启用,您需要从中选择一个:
使用驱动程序提供程序directConnect 通过 seleniumAddress 使用驱动程序提供程序参数此外,google-chrome 的 user-agent 似乎是强制生效的:
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'
这个用例
根据您的设置,两种模式均已启用,但 directConnect 配置有效,即具有 ChromeDriver v94
解决方案
作为一种解决方案,您可以采用以下任何一种方法:
更新directConnect
驱动程序提供程序以使用与您的 Chrome 版本匹配的 ChromeDriver。
更新 seleniumAddress
驱动程序提供程序以使用与您的 Chrome 版本匹配的 ChromeDriver。
【讨论】:
抱歉回复晚了。我已经意识到这一点,并且在将其变为 false 之后它起作用了。之前设置为 true 的主要原因是,当我的 docker selenium 网格未正确配置并且我的脚本似乎正在使用 directConnect 运行时,我的脚本正在运行。但后来我使用不同的程序重新安装了硒网格,然后它在网格上工作正常。无论如何也感谢您的回复 @DebanjanB : 如何找到相关的用户代理?就我而言,它是 Chrome 版本为 94.0.4606.54 的 Linux 机器 @DebanjanB :我正在使用 Protractor 来处理在 gitlab 管道中运行的自动化脚本。你能详细说明这些建议吗?以上是关于在 docker 容器中运行到不正确的 chromedriver 版本的主要内容,如果未能解决你的问题,请参考以下文章
使用 VS Code 调试在 Docker 容器中使用 ts-node 运行的 TypeScript 应用程序时,如何能够正确设置断点?
在 docker 微服务设置中运行 django rq 的正确方法