在 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 的正确方法

docker attach 正确用法

docker教程之从一头雾水到不一头雾水

Docker compose 未正确复制文件以运行反应应用程序

Docker基础操作,原来这才是正确打开Docker的新方式!