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

如何永久保存网站会话并在Puppeteer爬虫中复用

手动登录后保存Cookie实现Puppeteer自动续爬方案

完全可以通过手动登录后保存Cookie的方式维持登录状态,下面给你一套可行的Puppeteer实现方案,解决你之前会话丢失、无头模式失效的问题:

一、手动登录并保存Cookie到本地

先启动有头浏览器完成手动登录,然后将登录后的Cookie导出到本地文件:

const puppeteer = require('puppeteer');
const fs = require('fs').promises;

(async () => {
  // 启动有头浏览器,方便手动登录
  const browser = await puppeteer.launch({ headless: false });
  const page = await browser.newPage();
  
  await page.goto('你的目标网站登录页URL');
  
  // 暂停执行,等待你手动完成登录操作
  console.log('请在浏览器中完成登录,登录后按任意键继续...');
  process.stdin.once('data', async () => {
    // 获取当前页面的所有Cookie
    const cookies = await page.cookies();
    // 将Cookie保存到本地JSON文件
    await fs.writeFile('./cookies.json', JSON.stringify(cookies, null, 2));
    
    console.log('Cookie已保存,关闭浏览器即可');
    await browser.close();
  });
})();

运行这段代码,会弹出浏览器,你手动登录目标网站,登录完成后在终端按任意键,Cookie就会被保存到cookies.json文件里。

二、加载Cookie实现自动登录

每次启动爬虫时,先加载本地保存的Cookie,再访问目标网站即可维持登录状态,无头模式也能正常运行:

const puppeteer = require('puppeteer');
const fs = require('fs').promises;

(async () => {
  // 启动无头浏览器,添加必要参数避免被检测
  const browser = await puppeteer.launch({
    headless: 'new', // 新版无头模式,更接近真实浏览器
    args: [
      '--no-sandbox',
      '--disable-setuid-sandbox',
      '--disable-blink-features=AutomationControlled' // 避免被网站检测到自动化工具
    ]
  });
  const page = await browser.newPage();
  
  // 先加载保存的Cookie
  const cookiesString = await fs.readFile('./cookies.json');
  const cookies = JSON.parse(cookiesString);
  // 设置Cookie到当前页面
  await page.setCookie(...cookies);
  
  // 访问目标网站的登录后页面,此时应该已经处于登录状态
  await page.goto('你的目标网站登录后页面URL');
  
  // 这里执行你的每日任务,比如点击按钮、获取数据等
  console.log('已自动登录,开始执行任务...');
  // 示例:获取页面标题
  const pageTitle = await page.title();
  console.log('当前页面标题:', pageTitle);
  
  // 任务完成后关闭浏览器
  await browser.close();
})();

三、解决无头模式被检测的问题

有些网站会检测无头浏览器,你可以通过以下方式优化:

  • 设置真实的User-Agent:在page.setUserAgent()里传入常用浏览器的UA字符串,比如Chrome的UA
  • 禁用自动化特征:除了上面的--disable-blink-features=AutomationControlled,还可以在页面加载前执行:
    await page.evaluateOnNewDocument(() => {
      Object.defineProperty(navigator, 'webdriver', {
        get: () => undefined,
      });
    });
    
  • 模拟真实操作:比如添加随机延迟、模拟鼠标移动等,避免操作过于机械

四、其他可选方案

如果觉得Puppeteer配置麻烦,可以试试Playwright(微软出品的浏览器自动化工具),它的Cookie保存和加载更简洁,且对无头模式的兼容性更好:

  • 保存Cookie:await context.storageState({ path: 'storageState.json' })
  • 加载Cookie:await browser.newContext({ storageState: 'storageState.json' })

另外,如果目标网站的接口没有复杂的加密,也可以直接用axios或fetch带上保存的Cookie发送请求,但这种方式只适合静态接口,动态渲染的页面还是得用浏览器自动化工具。

注意事项

  • Cookie有有效期,有些网站的Cookie会定期过期,你需要定期重新保存最新的Cookie
  • 部署到服务器时,首次可以在本地生成Cookie文件后上传到服务器,或者用VNC连接服务器启动有头浏览器完成手动登录
  • 不要频繁执行任务,避免被网站封禁IP

内容的提问来源于stack exchange,提问作者martiorio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:50:21