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

Lis*_*Qiu 32 linux selenium-chromedriver

我在 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)
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

在此处输入图片说明

Yar*_*min 24

在我的情况下,chromedriver使用--verboseflag运行有助于找出问题:

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

Chrome 尝试侦听 IPv6 地址,但未在 Docker 中启用。您可以启用 IPv6支持(仅适用于 Linux 主机)或忽略错误,因为chromedriver进程无论如何都会侦听 IPv4。

  • 你好,请问如何“忽略错误”?就我而言,当我什么也没做时,容器就停止了。 (7认同)

Ass*_*NET 13

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

options = webdriver.ChromeOptions()
options.add_argument('--disable-dev-shm-usage')
Run Code Online (Sandbox Code Playgroud)

这是来自Google 的故障排除提示

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

  • 这可能是 Windows 上的 Docker 所特有的,因为这是几天前升级到新版本后才开始的 (4认同)
  • 如果您的“shm”大小太小(通常在 Docker 环境中),这将解决问题。请参阅 https://developers.google.com/web/tools/puppeteer/troubleshooting#running_on_alpine (3认同)

Get*_*toX 12

在一个行:你需要传递--whitelisted-ips=镀铬的驱动程序(不是浏览器!)

你可以用不同的方式来做(取决于你的环境设置):

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

    System.setProperty("webdriver.chrome.whitelistedIps", "");
Run Code Online (Sandbox Code Playgroud)

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

java -Dwebdriver.chrome.whitelistedIps= testClass etc...
Run Code Online (Sandbox Code Playgroud)

或 docker 通过传递JAVA_OPTSenv

java -Dwebdriver.chrome.whitelistedIps= testClass etc...
Run Code Online (Sandbox Code Playgroud)

  • 这是什么原因呢? (9认同)

Pra*_*dav 5

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

ChromeOptions options = new ChromeOptions().setHeadless(true);
WebDriver driver = new ChromeDriver(options);
Run Code Online (Sandbox Code Playgroud)

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


归档时间:

查看次数:

32748 次

最近记录:

4 年,6 月 前