Chrome+Selenium Java报错DevToolsActivePort file doesn't exist求助
解决ChromeDriver启动时DevToolsActivePort文件不存在的问题
问题环境
- Chrome浏览器版本:109.0.5414.120
- ChromeDriver版本:109.0.5414.74
- Selenium版本:3.13.0
- Java版本:1.8.0_361
- 操作系统:Windows 11
核心报错
org.openqa.selenium.WebDriverException: unknown error: DevToolsActivePort file doesn't exist
已尝试无效操作
添加--no-sandbox、--headless、--disable-dev-shm-usage参数,手动指定ChromeDriver路径,问题未解决。
解决方案
1. 匹配Chrome与ChromeDriver的精确版本
当前Chrome与ChromeDriver存在小版本差异,会触发兼容性问题。下载与Chrome完全匹配版本的ChromeDriver替换现有文件。
2. 优化ChromeOptions配置
在ChromeOptions中添加关键参数,解决DevToolsActivePort问题,配置代码如下:
ChromeOptions options = new ChromeOptions(); // 强制指定调试端口,避免端口冲突 options.addArguments("--remote-debugging-port=9222"); // 绕过系统安全模型,解决权限问题 options.addArguments("--no-sandbox"); // 解决资源限制问题 options.addArguments("--disable-dev-shm-usage"); // 使用新版无头模式,稳定性更强(不需要无头可删除) options.addArguments("--headless=new"); // 无头模式下必须指定窗口大小 options.addArguments("--window-size=1920,1080"); // 禁用GPU加速,避免环境兼容问题 options.addArguments("--disable-gpu"); // 最大化启动浏览器 options.addArguments("--start-maximized");
3. 简化Driver初始化代码
避免混合使用DesiredCapabilities和ChromeOptions,直接用ChromeOptions构造ChromeDriver,减少兼容问题。修改后的启动代码:
public WebDriver startBrowser(ExtentTest logger,String browserName, String userEID) { try { if(browserName.equalsIgnoreCase("chrome")) { System.setProperty("webdriver.http.factory", "apache"); // 用WebDriverManager自动拉取匹配版本的ChromeDriver WebDriverManager.chromedriver().browserVersion("109.0.5414.120").setup(); HashMap<String, Object> chromePrefs = new HashMap<String, Object>(); chromePrefs.put("profile.default_content_settings.popups", 0); ChromeOptions options = new ChromeOptions(); options.setExperimentalOption("prefs", chromePrefs); // 加入优化参数 options.addArguments("--remote-debugging-port=9222"); options.addArguments("--no-sandbox"); options.addArguments("--disable-dev-shm-usage"); options.addArguments("--headless=new"); options.addArguments("--window-size=1920,1080"); options.addArguments("--disable-gpu"); options.addArguments("--start-maximized"); // 直接用ChromeOptions初始化Driver driver = new ChromeDriver(options); driver.manage().deleteAllCookies(); // 延长隐式等待时间,2秒过短易导致元素定位失败 driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); } } catch (Exception e) { e.printStackTrace(); } return driver; }
4. 清理残留进程与检查权限
- 运行代码前关闭所有Chrome进程,避免残留进程占用端口或资源
- 确保运行代码的用户拥有Chrome安装目录、ChromeDriver文件的读写权限
5. 升级Selenium版本(推荐)
Selenium 3.13.0版本较旧,对新版本Chrome支持有限,建议升级到3.x系列最新稳定版(如3.141.59),或直接升级到Selenium 4.x,提升兼容性与稳定性。
内容的提问来源于stack exchange,提问作者user21155499
相关产品推荐
相关产品推荐

