Linux环境下使用selenium缓存占用问题_session not created: probably user data directory
背景
- Linux系统
- python环境
- 使用selenium驱动chrome
问题展示
selenium.common.exceptions.SessionNotCreatedException: 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
解决
这个错误的意思是:
Selenium 启动 Chrome 浏览器时使用了默认的用户数据目录(user data dir),而这个目录已经被另一个 Chrome 实例占用了,导致无法启动新的浏览器会话。
✅ 解决方案
有两个思路:
✅ 方案一:为每个 Selenium 会话指定一个唯一的 --user-data-dir
你可以使用 tempfile
模块为每个会话生成一个临时用户目录。
import tempfilefrom selenium import webdriverfrom selenium.webdriver.chrome.service import Servicefrom selenium.webdriver.chrome.options import Optionsfrom webdrivermanager_cn import ChromeDriverManagerimport time# 自动下载驱动driver_path = ChromeDriverManager().install()# 创建临时用户数据目录user_data_dir = tempfile.mkdtemp()# 设置 Chrome 启动参数options = Options()options.add_argument(f\"--user-data-dir={user_data_dir}\")options.add_argument(\"--no-sandbox\") # Linux 通常需要options.add_argument(\"--disable-dev-shm-usage\") # Linux 通常需要options.add_argument(\"--headless\") # 如不需要图形界面,可添加此项# 启动浏览器service = Service(driver_path)driver = webdriver.Chrome(service=service, options=options)# 使用浏览器driver.get(\"https://www.baidu.com\")print(driver.title)time.sleep(3)driver.quit()
✅ 方案二:完全不设置 --user-data-dir
参数
如果你没有强烈需求用到这个目录,只要不主动设置这个参数,Chrome 默认会用自己的匿名临时目录。
确保你没有在其他地方设置了 --user-data-dir
(比如环境变量、配置文件等)。
✅ 补充说明:为什么在 Linux 上更容易出错?
- Linux 下多个进程共享资源时更容易触发这种冲突。
- Linux 无头环境(如服务器)不支持多个 GUI 实例共享默认配置目录。
- Chrome 不允许两个实例同时使用同一个用户目录。