You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Selenium启动Chrome WebDriver时遭遇SessionNotCreatedException:用户数据目录已被占用

Selenium启动Chrome WebDriver时遭遇SessionNotCreatedException:用户数据目录已被占用

看起来你遇到的这个问题确实挺闹心的,我之前在Ubuntu环境下也碰到过类似的资源锁死情况,给你几个额外的排查和解决思路试试:


1. 清理残留的Chromedriver进程

你已经尝试杀死Chrome主进程,但可能漏掉了chromedriver的残留进程——这些后台进程往往会偷偷占用用户数据目录的锁文件。试试执行这条命令:

pkill -9 chromedriver

之后再重新运行你的脚本,看看是否还会报错。

2. 给Chrome添加更多隔离参数

有时候浏览器的扩展、缓存或者GPU渲染模块也会导致目录占用,试试在ChromeOptions里补充这些参数:

options.add_argument("--disable-extensions")
options.add_argument("--disable-cache")
options.add_argument("--disable-application-cache")
options.add_argument("--disable-gpu")  # 无头模式下推荐添加,避免渲染层的资源冲突
options.add_argument("--no-sandbox")  # Ubuntu环境下偶尔需要,绕过沙箱限制

3. 给临时目录搭配独立的Profile子目录

你已经用了临时目录,但可以再指定一个唯一的Profile子目录,进一步隔离每个WebDriver实例的环境:

import tempfile
import uuid
# 生成唯一的用户数据目录和Profile名
user_data_dir = tempfile.mkdtemp()
profile_name = f"Profile_{str(uuid.uuid4())[:8]}"
options.add_argument(f"--user-data-dir={user_data_dir}")
options.add_argument(f"--profile-directory={profile_name}")

这样每个启动的实例都会拥有完全独立的配置空间,几乎不会出现冲突。

4. 确保driver.quit()被100%执行

如果脚本中途意外崩溃,driver.quit()没来得及执行,就会留下僵尸进程占用资源。用try...finally包裹逻辑,保证退出动作必执行:

driver = None
try:
    driver = createModel()
    driver.get("https://www.google.com")
    print(driver.title)
finally:
    if driver is not None:
        driver.quit()

5. 检查临时目录的权限

虽然/tmp目录默认是开放权限,但如果之前手动创建过固定路径的用户目录,可能出现权限问题。可以用这条命令查看目录权限:

ls -ld /tmp/selenium-user-data

如果权限不对,执行:

chmod -R 777 /tmp/selenium-user-data

(用临时目录的话这个问题概率很低,但还是可以排查下)

6. 尝试降级Chrome/Chromedriver版本

有时候最新版的Chrome和Chromedriver会存在兼容性小bug,导致这类奇怪的锁死问题。可以指定一个稳定的旧版本试试,比如:

service = Service(ChromeDriverManager(version="118.0.5993.70").install())

记得Chrome浏览器版本也要对应降级,避免版本不匹配。


另外,如果你想用固定路径的用户目录,可以在启动前手动清空旧目录,避免残留的锁文件:

import shutil
import os
user_data_dir = "/tmp/selenium-user-data"
if os.path.exists(user_data_dir):
    shutil.rmtree(user_data_dir)
options.add_argument(f"--user-data-dir={user_data_dir}")

试试上面这些方法,应该能解决你的问题!

备注:内容来源于stack exchange,提问作者Ammar Ahmed

火山引擎 最新活动