You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级至Selenium 4.29.0后无法创建Chrome会话求助

Selenium 4.29.0升级后ChromeDriver启动报错:session not created: probably user data directory is already in use

近期将Selenium从4.27.0升级至4.29.0后,运行自动化测试时遇到SessionNotCreatedException,错误提示用户数据目录被占用,但代码中并未显式指定--user-data-dir参数,手动指定路径后问题依然存在,甚至移除所有启动参数也无法解决。

错误日志

org.openqa.selenium.SessionNotCreatedException: Could not start a new session. Response code 500. Message: session not created: probably user data directory is already in use, please specify a unique value for --user-data-dir argument, or don't use --user-data-dir 
Host info: host: '<< SERVER NAME >>', ip: '<< SERVER IP >>'
Build info: version: '4.29.0', revision: '5fc1ec94cb'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '6.1.0-32-amd64', java.version: '17.0.14'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Command: [null, newSession {capabilities=[Capabilities {browserName: chrome, goog:chromeOptions: {args: [--headless, --disable-dev-shm-usage], binary: /usr/bin/google-chrome, extensions: []}}]}]
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:114)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:75)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:61)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:187)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.invokeExecute(DriverCommandExecutor.java:216)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:174)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:545)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:245)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:174)
    at org.openqa.selenium.chromium.ChromiumDriver.<init>(ChromiumDriver.java:110)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:88)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:83)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:72)

ChromeDriver初始化代码

ChromeOptions options = new ChromeOptions();

HashMap<String, Object> chromePrefs = new HashMap<>();
chromePrefs.put("download.default_directory", downloadFolder.getAbsolutePath());
options.setExperimentalOption("prefs", chromePrefs);

options.addArguments("--headless");
options.addArguments("--disable-dev-shm-usage");

WebDriver driver = new ChromeDriver(options);
解决思路

1. 清理残留的Chrome/ChromeDriver进程

Linux环境下测试结束后,可能存在未正常退出的Chrome或ChromeDriver进程占用用户数据目录,执行以下命令强制清理:

# 杀掉所有Chrome相关进程
pkill -9 chrome
pkill -9 chromedriver

清理完成后重新运行测试,观察问题是否消失。

2. 显式指定唯一临时用户数据目录

Selenium 4.29.0的默认行为可能存在变更,自动复用了固定目录导致冲突。可以动态生成唯一临时目录规避:

ChromeOptions options = new ChromeOptions();

// 生成临时用户数据目录
File userDataDir = Files.createTempDirectory("chrome-user-data").toFile();
options.addArguments("--user-data-dir=" + userDataDir.getAbsolutePath());

HashMap<String, Object> chromePrefs = new HashMap<>();
chromePrefs.put("download.default_directory", downloadFolder.getAbsolutePath());
options.setExperimentalOption("prefs", chromePrefs);

options.addArguments("--headless");
options.addArguments("--disable-dev-shm-usage");

WebDriver driver = new ChromeDriver(options);

// 测试结束后自动删除临时目录(避免磁盘占用)
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
    deleteDirectory(userDataDir);
}));

补充目录删除方法:

private static void deleteDirectory(File dir) {
    File[] files = dir.listFiles();
    if (files != null) {
        for (File file : files) {
            deleteDirectory(file);
        }
    }
    dir.delete();
}

3. 检查Chrome与ChromeDriver版本兼容性

Selenium 4.29.0对ChromeDriver的版本要求可能有更新,必须保证Chrome浏览器和ChromeDriver版本完全匹配(如Chrome 124对应ChromeDriver 124.x)。通过以下命令查看当前版本:

# 查看Chrome版本
google-chrome --version
# 查看ChromeDriver版本
chromedriver --version

若版本不匹配,下载对应版本的ChromeDriver替换。

4. 检查用户数据目录的文件权限

Linux环境下,测试运行用户可能没有默认用户数据目录的读写权限,或目录所属用户/组错误。可以手动创建一个目录并赋予读写权限,再指定为--user-data-dir路径。

5. 禁用Selenium Manager自动配置(可选)

Selenium 4.x自带的Selenium Manager自动管理ChromeDriver,升级后可能出现兼容性问题。可以显式指定ChromeDriver路径禁用自动管理:

System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
ChromeOptions options = new ChromeOptions();
// 后续配置不变

内容的提问来源于stack exchange,提问作者threenplusone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 15:43:11