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

如何解决puppeteer代码使用pkg打包后exe运行立即闪退的问题?

解决步骤

  • 第一步:准备匹配版本的Chromium
    puppeteer每个版本对应特定的Chromium版本,你可以先在开发环境运行npm list puppeteer查看当前使用的puppeteer版本,下载对应版本的绿色版Chromium,解压后放在无中文、无空格的目录下,后续直接和打包后的exe放在同一级目录即可,不要把Chromium打包进exe,会导致体积过大且路径识别异常。

  • 第二步:修改代码配置
    需动态获取exe运行路径拼接Chromium地址,同时添加Windows环境必需的启动参数,完整修改后的代码示例如下:

const puppeteer = require("puppeteer");
const path = require("path");

async function scraper(url) {
  // 动态获取当前exe所在目录,拼接Chromium路径,示例中Chromium解压后的文件夹名为chrome-win,可根据实际情况修改
  const chromePath = path.join(path.dirname(process.execPath), "chrome-win", "chrome.exe");
  const browser = await puppeteer.launch({
    executablePath: chromePath,
    // Windows环境必须加这两个参数避免闪退
    args: ["--no-sandbox", "--disable-setuid-sandbox"],
    // 开发阶段可以设为false直观查看浏览器运行情况,打包后可改回true使用无头模式
    headless: "new"
  });
  const page = await browser.newPage();
  await page.goto(url);
  const title = await page.title();
  await browser.close();
  return title;
}

// 加catch捕获异常,避免未处理错误直接导致进程闪退
scraper("http://example.com").then(console.log).catch(console.error);
  • 第三步:配置pkg打包规则
    在项目的package.json中添加pkg配置,排除puppeteer内置的Chromium路径,避免打包时错误绑定路径:
{
  "name": "puppeteer-demo",
  "dependencies": {
    "puppeteer": "^你的实际版本号"
  },
  "pkg": {
    "targets": ["node18-win-x64"],
    "assets": [],
    // 排除puppeteer内置二进制文件,使用外置的Chromium
    "external": ["puppeteer-core"]
  }
}
  • 第四步:执行打包&部署
  1. 运行打包命令:pkg . -o 你的程序名.exe
  2. 把之前解压的Chromium文件夹和打包好的exe放在同一个目录下
  3. 排查问题时不要直接双击运行exe,先打开cmd,在cmd中执行.\你的程序名.exe,可以看到具体报错信息定位问题

常见闪退排查点:

  1. Chromium路径是否正确,路径中是否存在中文、空格
  2. Chromium版本和你使用的puppeteer版本是否匹配
  3. 是否添加了--no-sandbox等必要启动参数
  4. 代码是否添加了catch捕获异常,避免未处理的异常直接导致进程退出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 21:57:03