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

如何在Puppeteer的headless:true模式下保留浏览器数据与扩展

问题描述

我编写了一个Puppeteer脚本,在headless:false模式下搭配Google Chrome配置文件与executablePath参数使用时运行正常,能够保留所有会话及浏览器数据,且脚本对应的浏览器配置文件中的Chrome扩展也可正常工作。

但仅将模式改为headless:true后,脚本无法正常运行:既无法保留浏览器会话数据,也无法识别我的Chrome扩展。

以下是脚本代码:

const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth')
puppeteer.use(StealthPlugin())

const browser = await puppeteer.launch({
    headless: true,
    ignoreHTTPSErrors: true,
    executablePath: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
    args: [
      '--user-data-dir=/Users/x/Library/Application Support/Google/Chrome/Profile 2',
      '--window-size=1920,1080',
      "--no-sandbox",
      //"--disable-setuid-sandbox",
      "--disable-dev-shm-usage",
      "--disable-gpu",
      "--disable-extensions",
      "--disable-dev-tools",
      "--disable-infobars",
      "--ignore-certificate-errors",
      "--enable-logging",
      "--v=1",
      '--disable-setuid-sandbox',
      '--disable-infobars',
      '--window-position=0,0',
      '--ignore-certifcate-errors',
      '--ignore-certifcate-errors-spki-list',
      '--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
    ]
  });
  const page = await browser.newPage();

请问是否有办法让脚本在headless:true模式下正常运行?还是我必须在VDS机器上一直保持浏览器开启状态?


解决方法

你不需要一直保持浏览器开启,通过以下调整可以让脚本在无头模式下正常工作:

  • 移除禁用扩展的参数
    你的启动参数里包含--disable-extensions,这会直接禁用所有扩展,无论是否为无头模式。把这个参数从args数组中删除,才能让配置文件里的Chrome扩展正常加载。

  • 使用Chrome新无头模式
    旧版Chrome无头模式(headless:true)在会话数据读取和扩展支持上存在局限,从Chrome 96开始,官方推出了更接近正常浏览器的新无头模式,你可以将headless设为"new",或者在args中添加"--headless=new"。新无头模式会更完整地加载用户数据目录中的会话和扩展,行为和正常浏览器更一致。

  • 确认用户数据目录的正确性
    确保--user-data-dir的路径准确,且运行脚本的用户对该目录有读写权限。无头模式下如果路径错误或权限不足,会无法读取会话数据,甚至自动创建临时数据目录。

  • 清理重复参数
    你的args数组里存在重复参数(比如--disable-infobars、--ignore-certificate-errors),虽然不影响功能,但建议清理,避免潜在冲突。

调整后的示例代码:

const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth')
puppeteer.use(StealthPlugin())

const browser = await puppeteer.launch({
    headless: "new", // 使用新无头模式
    ignoreHTTPSErrors: true,
    executablePath: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
    args: [
      '--user-data-dir=/Users/x/Library/Application Support/Google Chrome/Profile 2',
      '--window-size=1920,1080',
      "--no-sandbox",
      "--disable-dev-shm-usage",
      "--disable-gpu",
      "--disable-dev-tools",
      "--disable-infobars",
      "--ignore-certificate-errors",
      "--enable-logging",
      "--v=1",
      '--disable-setuid-sandbox',
      '--window-position=0,0',
      '--ignore-certifcate-errors-spki-list',
      '--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
    ]
  });
  const page = await browser.newPage();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:24:25