如何将常规Chrome的LocalStorage/SessionStorage/Cookies迁移至Node.js Puppeteer浏览器?
解决Puppeteer复用Chrome登录状态的方法
方法一:正确复用Chrome用户数据目录
你之前仅指定executablePath但未生效,核心原因是没同时配置用户数据目录,或者Chrome进程未完全关闭。按以下步骤操作:
- 彻底关闭所有Chrome窗口(包括后台挂起的进程)
- 在Puppeteer启动参数中同时指定Chrome路径、用户数据目录,并禁用首次运行提示:
const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch({ executablePath: '/path/to/your/regular/chrome', // Windows示例:C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe;Mac示例:/Applications/Google Chrome.app/Contents/MacOS/Google Chrome userDataDir: '/path/to/your/chrome/user/data/dir', // Windows示例:C:\\Users\\你的用户名\\AppData\\Local\\Google\\Chrome\\User Data;Mac示例:~/Library/Application Support/Google/Chrome args: [ '--no-first-run', '--no-default-browser-check' ], headless: false // 先启用有头模式验证登录状态 }); const page = await browser.newPage(); await page.goto('https://webapp.com'); // 此时应保持已登录状态 })();
注意:如果你的Chrome使用多用户配置,需在userDataDir后追加具体配置文件路径,比如User Data/Profile 1。
方法二:手动导出并导入Cookies + LocalStorage
若复用用户目录仍有问题,可手动提取并导入登录状态数据:
1. 在已登录的Chrome中导出数据
打开目标网站,按F12打开控制台,执行以下代码导出数据:
// 导出Cookies const cookies = document.cookie.split(';').map(cookie => { const [name, value] = cookie.trim().split('='); return { name, value, domain: window.location.hostname }; }); console.log(JSON.stringify(cookies)); // 导出LocalStorage const localStorageData = Object.fromEntries(Object.entries(localStorage)); console.log(JSON.stringify(localStorageData));
复制控制台输出的JSON字符串备用。
2. 在Puppeteer中导入数据
const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); // 先加载目标网站(需先绑定域名,否则无法设置Cookies和LocalStorage) await page.goto('https://webapp.com', { waitUntil: 'domcontentloaded' }); // 导入Cookies const savedCookies = JSON.parse('替换为你导出的Cookies JSON字符串'); await page.setCookie(...savedCookies); // 导入LocalStorage const savedLocalStorage = JSON.parse('替换为你导出的LocalStorage JSON字符串'); await page.evaluate((storage) => { Object.entries(storage).forEach(([key, value]) => { localStorage.setItem(key, value); }); }, savedLocalStorage); // 刷新页面,恢复登录状态 await page.reload(); })();
若网站依赖SessionStorage,将上述代码中的localStorage替换为sessionStorage即可。
方法三:连接到已运行的Chrome实例(最可靠)
直接复用你已登录的Chrome窗口,步骤如下:
- 关闭所有Chrome进程,用调试模式启动Chrome:
- Windows:命令提示符执行
"C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222 - Mac:终端执行
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
- Windows:命令提示符执行
- 在启动的Chrome窗口中登录目标网站
- 在Puppeteer中连接该实例:
const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.connect({ browserURL: 'http://localhost:9222', defaultViewport: null // 保持原窗口尺寸 }); // 获取已打开的目标页面,或新建页面 const pages = await browser.pages(); const page = pages.find(p => p.url().includes('webapp.com')) || await browser.newPage(); if (!page.url().includes('webapp.com')) { await page.goto('https://webapp.com'); } // 此时页面已处于登录状态 })();
内容的提问来源于stack exchange,提问作者Easy Merchant
相关产品推荐
相关产品推荐

