
Selenium v4.8.1 在 Docker 容器中连接 ChromeDriver 时因 Chrome 启动崩溃报错,核心原因是 Chrome v111+ 新增了跨域安全限制,需显式添加 --remote-allow-origins=* 启动参数。
selenium v4.8.1 在 docker 容器中连接 chromedriver 时因 chrome 启动崩溃报错,核心原因是 chrome v111+ 新增了跨域安全限制,需显式添加 `--remote-allow-origins=*` 启动参数。
在使用 Selenium 4.8.1 与较新版本 Chrome(如 v111 及以上)进行远程自动化测试时,若将测试代码部署于 Docker 容器中,常会遇到如下典型错误:
unknown error: Chrome failed to start: crashed. (unknown error: DevToolsActivePort file doesn't exist) (The process started from chrome location /usr/bin/google-chrome is no longer running...)
该问题并非环境配置缺失或端口未暴露所致,而是 Chrome 自 v111 起强制启用了更严格的远程调试访问控制策略:默认拒绝来自非同源(尤其是 localhost 以外)的 WebDriver 连接请求。当 Selenium 通过 RemoteWebDriver 尝试连接运行在独立容器(如 Selenium Standalone Server)中的 ChromeDriver 时,因 Origin 校验失败导致 Chrome 进程立即崩溃。
✅ 正确修复方式:添加关键启动参数
只需在 ChromeOptions 中加入 --remote-allow-origins=* 参数即可解除限制:
package remoteTesting;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.net.MalformedURLException;
import java.net.URL;
public class ChromeStandAloneTest {
public static void main(String[] args) throws MalformedURLException {
ChromeOptions chromeOptions = new ChromeOptions();
// ? 必加:兼容 Chrome v111+ 的必需参数
chromeOptions.addArguments("--remote-allow-origins=*");
// ⚠️ 注意:URL 应指向 Selenium Server 容器的可访问地址(非 localhost)
// 若测试容器与 Selenium 容器同属一个 Docker 网络,应使用服务名(如 selenium-hub)
WebDriver driver = new RemoteWebDriver(
new URL("http://selenium-hub:4444/wd/hub"),
chromeOptions
);
driver.get("https://www.google.com");
System.out.println("Page title: " + driver.getTitle());
driver.quit();
}
}
? 关键注意事项
-
localhost 不适用于容器间通信:Docker 容器内 localhost 指向自身,而非宿主机或其他容器。若 Selenium Server 运行在独立容器(如 selenium/standalone-chrome:4.8.1),请确保:
- 使用 Docker 自定义网络(docker network create selenium);
- 启动 Selenium 容器时指定服务名(如 --name selenium-hub);
- 测试容器通过该服务名(http://selenium-hub:4444/wd/hub)访问,而非 localhost。
-
推荐补充稳定化参数(尤其在无界面 Docker 环境中):
chromeOptions.addArguments("--no-sandbox"); chromeOptions.addArguments("--disable-dev-shm-usage"); chromeOptions.addArguments("--disable-gpu"); chromeOptions.addArguments("--headless=new"); // 如需无头模式 SLF4J 日志警告可忽略:SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder" 属于日志框架未绑定实现的提示,不影响功能,但建议在 pom.xml 中添加 slf4j-simple 依赖以启用基础日志输出。
✅ 验证建议
-
启动 Selenium Standalone Server(带 Chrome):
docker run -d -p 4444:4444 --shm-size="2g" --name selenium-hub selenium/standalone-chrome:4.8.1
构建并运行你的测试容器(确保与 selenium-hub 处于同一 Docker 网络)。
观察日志:成功时应输出 Page title: Google;若仍失败,请检查容器网络连通性(如 curl http://selenium-hub:4444/wd/hub/status 是否返回 200)。
此方案已广泛验证于 Selenium 4.8.1 + Chrome v111–v119 的 Docker 场景,是当前最简洁、可靠且符合官方实践的解决路径。










