启动 chromedriver 时如何修复“[严重]:bind() 失败:无法分配请求的地址 (99)”
- 2024-11-01 08:41:00
- admin 原创
- 45
问题描述:
我在 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)
我该如何解决这个问题?
解决方案 1:
就我而言,chromedriver
使用--verbose
flag 运行有助于解决问题:
[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 中未启用该地址。您可以启用 IPv6支持(仅适用于 Linux 主机),也可以忽略该错误,因为chromedriver
进程无论如何都会监听 IPv4。
解决方案 2:
在一行中:您需要传递--whitelisted-ips=
到chrome 驱动程序(而不是 chrome!)
您可以用不同的方式进行操作(取决于您的环境设置):
如果您在代码中本地/直接使用 ChromeDriver(而不是使用 RemoteWebDriver),只需在 ChromeDriver init 之前插入以下几行
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=
解决方案 3:
我设法通过添加如下所示的参数来解决问题(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
标志启动浏览器
解决方案 4:
原因在于其他地方。我在 docker 容器上运行 chrome,当驱动程序以无头模式运行时,这个问题就解决了。
ChromeOptions options = new ChromeOptions().setHeadless(true);
WebDriver driver = new ChromeDriver(options);
结果:现在测试成功运行,没有任何错误。
解决方案 5:
我的团队也遇到了同样的问题,但我们的解决方案是全新的。可能是因为根本原因不同,尽管可见的错误消息相同。
5 天前,这个问题开始出现在我们的 CI/CD 管道中。我们意识到,新的 selenium/standalone-chrome docker 镜像同时被推送到 selenium docker hub。
https://hub.docker.com/r/selenium/standalone-chrome/tags
最新那张图像导致了此错误。在一年半的时间里,这种情况从未发生过。但最新那张图像却出现了。该图像的摘要:9943ba9d2a89e984080f5681b390229fb47f7d3bb732e4f440456fc52335bae8
解决方案是将我们的 Jenkins 使用的镜像恢复为 21 天前推送的 selenium/standalone-chrome docker 镜像。摘要:bc4023992691ab8e2f20297f334fdcddd982928fbd969239b39b3dbc2dfc0657
我们计划检查即将推出的新图像是否与我们的 CI/CD 兼容,以便我们能够恢复最新的 selenium 图像
谢谢
解决方案 6:
我遇到了类似的问题;我的问题是我没有退出现有的驱动程序并尝试再次使用。driver.quit() 解决了我的问题。
解决方案 7:
在我的例子中,有两个 docker 容器正在运行,selenium 使用端口 4444。关闭一个容器解决了另一个容器的问题。消息仍然存在,但测试正在运行。之前它们卡住了。
解决方案 8:
我在尝试在容器中运行测试(Java)时遇到了这个问题ubuntu:20.04
。从本指南 Selenium 中提取了以下内容:WebDriverException:Chrome 无法启动:崩溃,因为 google-chrome 不再运行,因此 ChromeDriver 假设 Chrome 已崩溃
ChromeOptions options = new ChromeOptions();
options.addArguments("--no-sandbox", "--headless", "--window-size=1024x768");
有线程表明--no-sandbox
必须是第一个,但是我实验过,这不是必需的,至少在 Java 中不是。
解决方案 9:
经过数十个小时的投入,终于找到了解决办法。首先是 chromeoptions:
ChromeOptions options = new ChromeOptions();
System.setProperty("webdriver.chrome.whitelistedIps", "");
options.addArguments("--headless");
options.addArguments("--no-sandbox");
options.addArguments("--disable-dev-shm-usage");
options.addArguments("--disable-gpu");
options.addArguments("--window-size=1920,1080");
options.addArguments("--remote-debugging-port=9222");
options.addArguments("--disable-extensions");
options.addArguments("--disable-software-rasterizer");
其次你的docker没有显示,添加这个:
Xvfb :99 -screen 0 1920x1080x24 &
# Give Xvfb some time to start
echo "Xvfb started."
sleep 5
现在建造!
仍然无法正常工作(java)。请记住,您复制了 war 文件,但目标仍然没有使用选项更新,重建它
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件