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

使用Node SEA打包exe时,@puppeteer/browsers.install报404错误求助

使用@puppeteer/browsers安装Chrome时404错误的解决方法

我正在开发一个用Node SEA将代码打包为.exe的项目,因打包puppeteer需自行安装Chrome,故切换为puppeteer-core + @puppeteer/browsers组合。但本地安装Chrome时触发404错误:

Error in main function: Error: Got status code 404
   at C:\Users\user\OneDrive\Desktop\core changes\node_modules\@puppeteer\browsers\lib\cjs\httpUtil.js:135:31
   at ClientRequest.requestCallback (C:\Users\user\OneDrive\Desktop\core changes\node_modules\@puppeteer\browsers\lib\cjs\httpUtil.js:72:13)
   at Object.onceWrapper (node:events:634:26)
   at ClientRequest.emit (node:events:519:28)

我判断问题出在安装选项上,但pptr官方文档未提供有效值上下文,网上也找不到选项变量的赋值示例,无法定位具体原因,寻求帮助。

我的代码如下:

const fs = require('node:fs');
const path = require('node:path');
const puppeteerBrowsers = require('@puppeteer/browsers');
const puppeteer = require('puppeteer-core');

const cacheDir = path.join(os.homedir(), '.CSVtoPDF', 'cache');
  
if(!fs.existsSync(cacheDir)){
  fs.mkdirSync(path.join(os.homedir(), '.CSVtoPDF'));
  fs.mkdirSync(cacheDir);
}

const installedBrowsers = await puppeteerBrowsers.getInstalledBrowsers({cacheDir});

if(installedBrowsers.length === 0){
  let browserInfo = await puppeteerBrowsers.install({
    browser: 'chrome',
    buildId: '1300313',
    cacheDir,
  });
}

// puppeteer-core 相关代码

问题分析

  1. 缺失模块引入:代码中使用了os.homedir()但未引入os模块,会导致运行时错误,虽不是当前404的直接原因,但必须修复。
  2. 安装参数不匹配:404的核心原因是buildId与当前系统平台/架构不匹配,或未明确指定platform和arch参数,导致@puppeteer/browsers请求了不存在的Chrome安装包资源。不同系统对应的buildId存在差异,若手动指定的buildId无对应平台的安装包,就会返回404。

解决方案

1. 补全os模块引入

在代码顶部添加:

const os = require('node:os');

2. 自动匹配对应平台的最新稳定版(推荐)

无需手动指定buildId,让工具自动获取适配当前系统的Chrome稳定版:

if(installedBrowsers.length === 0){
  let browserInfo = await puppeteerBrowsers.install({
    browser: 'chrome',
    channel: 'stable', // 指定安装稳定通道版本
    cacheDir,
  });
}

3. 手动指定匹配的buildId、platform和arch

若必须固定版本,需确认buildId对应你的系统版本,同时明确指定平台和架构:

if(installedBrowsers.length === 0){
  let browserInfo = await puppeteerBrowsers.install({
    browser: 'chrome',
    buildId: '1300313', // 确保此buildId适配你的系统
    platform: 'win64', // 可选值:win64、linux64、mac-arm64、mac-x64等
    arch: 'x64',
    cacheDir,
  });
}

4. 验证buildId有效性

可先调用工具接口获取对应通道的有效buildId,避免手动指定错误:

const versionInfo = await puppeteerBrowsers.resolveBrowserVersion({
  browser: 'chrome',
  channel: 'stable',
});
console.log('当前平台有效buildId:', versionInfo.buildId);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 18:13:16