如何配置Headless Chrome复用会话跳过双因素认证
实现复用Chrome会话自动登录(跳过双因素认证)
刚好我之前折腾过类似的需求,这就给你一步步讲清楚怎么实现:
1. 先找到你的Chrome用户配置文件路径
不同系统的默认路径不一样,你得对应找自己的:
- Windows:
C:\Users\<你的用户名>\AppData\Local\Google\Chrome\User Data - Mac:
~/Library/Application Support/Google/Chrome - Linux:
~/.config/google-chrome
注意:如果你用的是Chrome的Beta/Dev版本,路径会带对应后缀,比如
User Data\Beta,要调整准确。
2. 配置Puppeteer的启动参数
核心就是指定Chrome的可执行文件路径,以及指向你的用户数据目录,这样就能复用你手动登录过的会话了。直接上代码示例:
const puppeteer = require('puppeteer'); (async () => { // 替换成你自己的Chrome可执行文件路径 const chromeExecPath = 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe'; // Windows // const chromeExecPath = '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'; // Mac // const chromeExecPath = '/usr/bin/google-chrome'; // Linux // 替换成你的用户数据目录路径 const userDataDir = 'C:\\Users\\YourUsername\\AppData\\Local\\Google\\Chrome\\User Data'; // Windows // const userDataDir = '/Users/YourUsername/Library/Application Support/Google/Chrome'; // Mac // const userDataDir = '/home/YourUsername/.config/google-chrome'; // Linux const browser = await puppeteer.launch({ executablePath: chromeExecPath, userDataDir: userDataDir, headless: 'new', // 新版无头模式,Chrome 112+支持,测试阶段可以先设为false可视化验证 args: [ '--no-sandbox', // 部分环境下需要,比如Linux服务器 '--disable-setuid-sandbox' ] }); const page = await browser.newPage(); await page.goto('目标网站的登录URL'); // 等待主页元素加载,确认是否自动登录成功 try { await page.waitForSelector('#主页专属元素ID', { timeout: 5000 }); console.log('自动登录成功,已跳过双因素认证!'); } catch (err) { console.log('可能会话失效,需要重新手动登录一次'); } // 这里可以加后续的业务操作代码 // 如果需要保持会话,可以用browser.disconnect()代替close() // await browser.close(); })();
3. 关键注意事项
- 启动Puppeteer前,一定要关闭所有正在运行的Chrome窗口,否则会因为用户数据目录被占用导致启动失败。
- 如果你用的是自定义Chrome配置文件(比如
Profile 1),需要在args里加一句:'--profile-directory=Profile 1'。 - 测试阶段建议把
headless设为false,可视化确认登录状态,没问题再切换到无头模式。 - 确保你的Puppeteer版本和Chrome版本兼容,避免出现启动报错的情况。
内容的提问来源于stack exchange,提问作者Cave Johnson
相关产品推荐
相关产品推荐

