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

2024-11-01 08:41:00
admin
原创
165
摘要:问题描述:我在 Centos 7 平台下载了最新版本的 chromedriver:https://chromedriver.storage.googleapis.com/index.html? path=74.0.3729.6/ 我启动 chromedriver 并出现此错误。错误 :Starting Chr...

问题描述:

我在 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使用--verboseflag 运行有助于解决问题:

[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_OPTSenv来运行 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 文件,但目标仍然没有使用选项更新,重建它

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1120  
  IPD(Integrated Product Development,集成产品开发)流程是一种广泛应用于高科技和制造业的产品开发方法论。它通过跨职能团队的紧密协作,将产品开发周期缩短,同时提高产品质量和市场成功率。在IPD流程中,CDCP(Concept Decision Checkpoint,概念决策检查点)是一个关...
IPD培训课程   75  
  研发IPD(集成产品开发)流程作为一种系统化的产品开发方法,已经在许多行业中得到广泛应用。它不仅能够提升产品开发的效率和质量,还能够通过优化流程和资源分配,显著提高客户满意度。客户满意度是企业长期成功的关键因素之一,而IPD流程通过其独特的结构和机制,能够确保产品从概念到市场交付的每个环节都围绕客户需求展开。本文将深入...
IPD流程   66  
  IPD(Integrated Product Development,集成产品开发)流程是一种以跨职能团队协作为核心的产品开发方法,旨在通过优化资源分配、提高沟通效率以及减少返工,从而缩短项目周期并提升产品质量。随着企业对产品上市速度的要求越来越高,IPD流程的应用价值愈发凸显。通过整合产品开发过程中的各个环节,IPD...
IPD项目管理咨询   76  
  跨部门沟通是企业运营中不可或缺的一环,尤其在复杂的产品开发过程中,不同部门之间的协作效率直接影响项目的成败。集成产品开发(IPD)作为一种系统化的项目管理方法,旨在通过优化流程和增强团队协作来提升产品开发的效率和质量。然而,跨部门沟通的复杂性往往成为IPD实施中的一大挑战。部门之间的目标差异、信息不对称以及沟通渠道不畅...
IPD是什么意思   70  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用