Selenium-Webdriver(Node.js)同时运行两个Chrome配置文件异常问题
问题分析与解决方案
核心原因
你遇到的问题本质是Chrome对同一个user-data-dir目录存在单实例锁定机制:即便指定了不同的profile-directory,第二个启动的Chrome实例只能在现有用户数据目录下加载指定配置,但无法获取完整的进程控制权,导致Selenium只能与第一个实例建立会话并执行指令。
解决方案
方案1:为每个实例单独复制用户数据目录(保留原有配置)
直接复制原用户数据目录到不同路径,让每个Chrome实例拥有独立的用户数据空间,彻底避免锁冲突:
- 复制原用户数据目录(Windows下默认路径:
${os.homedir()}/AppData/Local/Google/Chrome/User Data)到两个新路径,比如./chrome-data-profile1和./chrome-data-profile2 - 每个Selenium会话分别指定对应的
user-data-dir,同时保留原profile-directory参数
代码示例:
const { Builder } = require('selenium-webdriver'); const chrome = require('selenium-webdriver/chrome'); const path = require('path'); // 实例1:绑定复制后的第一个用户数据目录 const options1 = new chrome.Options(); options1.addArguments(`user-data-dir=${path.join(__dirname, 'chrome-data-profile1')}`); options1.addArguments('profile-directory=Default'); // 实例2:绑定复制后的第二个用户数据目录 const options2 = new chrome.Options(); options2.addArguments(`user-data-dir=${path.join(__dirname, 'chrome-data-profile2')}`); options2.addArguments('profile-directory=Profile 1'); // 启动两个独立实例 const driver1 = await new Builder().forBrowser('chrome').setChromeOptions(options1).build(); const driver2 = await new Builder().forBrowser('chrome').setChromeOptions(options2).build(); // 分别执行指令 await driver1.get('https://example.com'); await driver2.get('https://google.com');
方案2:使用临时目录隔离用户数据(适合一次性操作)
如果不需要保留原有配置,可通过Node.js临时目录生成工具,为每个实例创建独立的临时用户数据目录:
const { Builder } = require('selenium-webdriver'); const chrome = require('selenium-webdriver/chrome'); const tmp = require('tmp'); // 生成两个独立临时目录 const tmpDir1 = tmp.dirSync().name; const tmpDir2 = tmp.dirSync().name; const options1 = new chrome.Options(); options1.addArguments(`user-data-dir=${tmpDir1}`); const options2 = new chrome.Options(); options2.addArguments(`user-data-dir=${tmpDir2}`); const driver1 = await new Builder().forBrowser('chrome').setChromeOptions(options1).build(); const driver2 = await new Builder().forBrowser('chrome').setChromeOptions(options2).build();
注意事项
- 绝对不要让多个Chrome实例共享同一个原始
user-data-dir,否则必然触发进程锁冲突 - 复制用户数据目录的方式可以完整保留原配置的扩展、书签、Cookie等数据,适合需要复用原有用户环境的场景
- 临时目录方案适合一次性多实例任务,无需保留用户数据的场景
内容的提问来源于stack exchange,提问作者April Summers
相关产品推荐
相关产品推荐

