启动chromedriver时如何解决“ [SEVERE]:bind()失败:无法分配请求的地址(99)”

时间:2019-04-25 08:19:00

标签: linux selenium-chromedriver

我在Centos 7平台上下载了最新版本的chromedriver:https://chromedriver.storage.googleapis.com/index.html?path=74.0.3729.6/ 我启动chromedriver并收到此错误。

错误:

  

在端口9515上启动ChromeDriver 74.0.3729.6(255758eccf3d244491b8a1317aa76e1ce10d57e9-refs / branch-heads / 3729 @ {#29})   仅允许本地连接。   请保护ChromeDriver和相关测试框架使用的端口,以防止恶意代码访问。   [1556179366.141] [SEVERE]:bind()失败:无法分配请求的地址(99)

我该如何解决?

enter image description here

8 个答案:

答案 0 :(得分:3)

在一行中:您需要将--whitelisted-ips=传递到 chrome驱动程序(不是chrome!)

您可以通过其他方式(取决于您的环境设置)进行操作:

如果您从代码中本地/直接使用ChromeDriver(而不使用RemoteWebDriver),只需在ChromeDriver初始化之前在下面插入行

    System.setProperty("webdriver.chrome.whitelistedIps", "");

如果您远程使用它(例如selenium hub / grid),则需要在节点启动时设置系统属性,例如在命令中:

java -Dwebdriver.chrome.whitelistedIps= testClass etc...

或通过传递JAVA_OPTS env

的docker
  chrome:
    image: selenium/node-chrome:3.141.59
    container_name: chrome
    depends_on:
      - selenium-hub
    environment:
      - HUB_HOST=selenium-hub
      - HUB_PORT=4444
      - JAVA_OPTS=-Dwebdriver.chrome.whitelistedIps=

答案 1 :(得分:2)

在我的情况下,运行带有chromedriver标志的--verbose有助于解决问题:

[1564749154.010][SEVERE]: bind() failed: Cannot assign requested address (99)
[1564749154.011][INFO]: listen on IPv6 failed with error ERR_ADDRESS_INVALID

Chrome浏览器尝试监听Docker中未启用的IPv6地址。您可以enable IPv6支持(仅适用于Linux主机),也可以忽略该错误,因为chromedriver进程仍将在IPv4上进行侦听。

答案 2 :(得分:2)

我设法通过添加如下所示的参数(Python)来解决

options = webdriver.ChromeOptions()
options.add_argument('--disable-dev-shm-usage')

答案 3 :(得分:1)

原因在于其他地方。我在docker容器上运行chrome,对我来说,当驱动程序以无头模式运行时,此问题已解决。

ChromeOptions选项=新的ChromeOptions()。setHeadless(true); WebDriver驱动程序=新的C​​hromeDriver(选项);

结果:现在测试成功运行,没有任何错误。

答案 4 :(得分:1)

我的团队遇到了同样的问题,但在我们的案例中,解决方案是全新的。 可能是因为根本原因不同,虽然可见的错误信息是一样的。

该问题在 5 天前开始出现在我们的 CI/CD 管道中。 我们意识到同时新的 selenium/standalone-chrome docker 镜像被推送到 selenium docker hub。

https://hub.docker.com/r/selenium/standalone-chrome/tags

那个最新的图像导致了这个错误。这在 1.5 年期间从未发生过。但它发生在最新的图像上。该图片摘要:9943ba9d2a89e984080f5681b390229fb47f7d3bb732e4f440456fc52335bae8

解决方案是将我们 Jenkins 使用的镜像恢复为 21 天前推送的 selenium/standalone-chrome docker 镜像。摘要:bc4023992691ab8e2f20297f334fdcddd982928fbd969239b39b3dbc2dfc0657

我们计划检查新镜像是否与我们的 CI/CD 兼容,以便我们可以更新最新的 selenium 镜像

谢谢

答案 5 :(得分:0)

该错误表示端口/地址组合已在使用中

这意味着

  • 您已经运行了两次程序,第一次尝试出错或停止,并且端口/地址未正确关闭
  • 计算机上还有其他程序正在使用该地址

要查看主机上打开的端口,请使用命令netstat -vatn。这将提供很多输出!要检查是否正在使用9515,请使用netstat -vatn |grep 9515

这样的grep过滤输出

您可能需要做的就是等待几分钟,让套接字超时,然后重试

更新:chromedriver中必须设置一个选项,这是使用docker的一种方法。请注意,--whitelisted-ips之后没有任何内容:强制为未设置。为此,您需要在运行docker命令的目录中chromedriver zip的副本

x-Mac$ docker run -it -v $(pwd):/root/stuff -p 9515:9515 centos/python-36-centos7 /bin/bash -c "cd /tmp; unzip /root/stuff/chromedriver_linux64.zip; ./chromedriver --whitelisted-ips="

答案 6 :(得分:0)

在我的情况下,我们有2个docker容器正在运行,硒使用了端口4444。关闭一个容器可以解决另一个容器的问题。该消息仍然存在,但是测试正在运行。早些时候他们陷入困境。

答案 7 :(得分:0)

我有类似的问题;我的问题是我没有退出现有驱动程序,而是尝试再次使用。 driver.quit()解决了我的问题。