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

Selenium-Webdriver(Node.js)同时运行两个Chrome配置文件异常问题

问题分析与解决方案

核心原因

你遇到的问题本质是Chrome对同一个user-data-dir目录存在单实例锁定机制:即便指定了不同的profile-directory,第二个启动的Chrome实例只能在现有用户数据目录下加载指定配置,但无法获取完整的进程控制权,导致Selenium只能与第一个实例建立会话并执行指令。


解决方案

方案1:为每个实例单独复制用户数据目录(保留原有配置)

直接复制原用户数据目录到不同路径,让每个Chrome实例拥有独立的用户数据空间,彻底避免锁冲突:

  1. 复制原用户数据目录(Windows下默认路径:${os.homedir()}/AppData/Local/Google/Chrome/User Data)到两个新路径,比如./chrome-data-profile1和./chrome-data-profile2
  2. 每个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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 23:28:16