linux 如何修复“[严重]:绑定()失败:启动chromedriver时无法分配请求的地址(99)”

ctzwtxfj  于 2022-12-11  发布在  Linux
关注(0)|答案(8)|浏览(224)

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

Starting ChromeDriver 74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}) on port 9515
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
[1556179366.141][SEVERE]: bind() failed: Cannot assign requested address (99)

我该如何解决这个问题?

ajsxfq5m

ajsxfq5m1#

在我的例子中,运行带有--verbose标志的chromedriver有助于解决这个问题:

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

Chrome试图监听IPv6地址,Docker中未启用此功能。您可以选择enable IPv6支持(仅适用于Linux主机)或忽略此错误,因为chromedriver进程无论如何都将监听IPv4。

yqlxgs2m

yqlxgs2m2#

在一行中:您需要将--whitelisted-ips=传递到chrome驱动程序(不是chrome!)
您可以通过不同的方式执行此操作(取决于您的环境设置):
如果您从代码中本地/直接使用ChromeDriver(不使用RemoteWebDriver),只需在ChromeDriver init之前插入下面的行

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

如果您远程使用它(例如,selenium集线器/网格),则需要在节点启动时设置系统属性,如以下命令所示:

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

或通过传递JAVA_OPTS env

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=
j2cgzkjk

j2cgzkjk3#

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

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

这是来自Google的故障排除提示:
默认情况下,Docker运行一个/dev/shm共享内存空间为64MB的容器。这对于Chrome来说通常太小,并且会导致Chrome在渲染大型页面时崩溃。要修复此问题,请使用docker run --shm-size=1gb运行容器,以增加/dev/shm的大小。自Chrome 65起,不再需要这样做。请使用--disable-dev-shm-usage标志启动浏览器

q8l4jmvw

q8l4jmvw4#

原因在别的地方。我在Docker容器上运行Chrome,对我来说,当驱动程序在无头模式下运行时,这个问题就解决了。

ChromeOptions options = new ChromeOptions().setHeadless(true);
WebDriver driver = new ChromeDriver(options);

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

rmbxnbpk

rmbxnbpk5#

我的团队也遇到过同样的问题,但我们的解决方案是全新的。可能是因为根本原因不同,尽管可见的错误消息是相同的。
这个问题5天前开始出现在我们的CI/CD管道中。我们意识到,同时新的 selenium /独立 chrome 对接图像被推到 selenium 对接中心。
https://hub.docker.com/r/selenium/standalone-chrome/tags
最新的图像导致了这个错误。在1.5年的时间里,以前从未发生过这种情况。但最新的图像却发生了这种情况。该图像的摘要:第一章
解决方案是将我们的Jenkins使用的图像还原为21天前推送的 selenium /独立 chrome Docker图像。2006年12月15日,北京
我们计划检查即将推出的新映像与CI/CD的兼容性,以便我们可以使用最新的Selenium映像进行更新
谢谢

ghhkc1vu

ghhkc1vu6#

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

tktrz96b

tktrz96b7#

在我的例子中,有2个Docker容器正在运行,端口4444被selenium使用。关闭一个容器解决了另一个容器的问题。消息仍然存在,但测试正在运行。早些时候,它们被卡住了。

iqih9akk

iqih9akk8#

我在尝试在容器ubuntu:20.04中运行测试(Java)时遇到了这个问题。

ChromeOptions options = new ChromeOptions();
options.addArguments("--no-sandbox", "--headless", "--window-size=1024x768");

有线程声明--no-sandbox必须是第一个,但我做了实验,这是没有必要的,至少在Java中是这样。

相关问题