启动 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 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 文件,但目标仍然没有使用选项更新,重建它

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用