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

如何将常规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窗口,步骤如下:

  1. 关闭所有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
  2. 在启动的Chrome窗口中登录目标网站
  3. 在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 17:25:23