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

Heroku服务器运行Puppeteer自动化浏览器启动报错解决方案

问题根因

报错核心原因是Heroku默认运行镜像未预装Puppeteer内置Chromium所需的系统共享库,你日志中提示的libnss3.so: cannot open shared object file就是典型的依赖缺失错误,除此之外Chromium运行还依赖十余个系统库,缺任何一个都会导致浏览器启动失败。

可行解决方案

方案1:使用Puppeteer适配的Heroku构建包(推荐,操作成本最低)

该构建包会在应用构建阶段自动安装全量Chromium运行依赖,无需手动配置包列表:

  • 本地安装好Heroku CLI并登录你的账号,进入项目根目录
  • 执行命令添加构建包,注意需要将该构建包放在Node.js构建包之前:
heroku buildpacks:add --index 1 jontewks/puppeteer
  • 执行heroku buildpacks确认构建包顺序,确保Node.js相关构建包排在Puppeteer构建包之后
  • 提交代码重新触发部署即可

方案2:通过Apt构建包手动安装依赖

如果不想使用第三方维护的Puppeteer构建包,可以用官方apt构建包手动按需安装依赖:

  • 添加Heroku官方apt社区构建包:
heroku buildpacks:add --index 1 heroku-community/apt
  • 在项目根目录新建名为Aptfile的无后缀文件,写入以下依赖包名:
libnss3
libatk1.0-0
libatk-bridge2.0-0
libcups2
libdrm2
libxkbcommon0
libxcomposite1
libxdamage1
libxrandr2
libgbm1
libpango-1.0-0
libcairo2
libasound2
libatspi2.0-0
libxshmfence1
  • 将Aptfile提交到代码仓库后重新部署,构建阶段会自动安装列表内的所有系统库

必须配置的Puppeteer启动参数

不管用上述哪种方案,都需要给Puppeteer启动逻辑加Heroku环境必需的运行参数,否则后续可能触发沙箱权限、内存不足类报错,标准启动配置参考:

const browser = await puppeteer.launch({
  headless: true,
  args: [
    '--no-sandbox',
    '--disable-setuid-sandbox',
    '--disable-dev-shm-usage',
    '--disable-gpu'
  ]
})

注意:--no-sandbox是Heroku容器环境的必填参数,平台默认运行权限不支持Chromium的沙箱隔离机制

依赖校验方法

部署完成后可以执行heroku run bash进入应用运行环境,运行以下命令检查依赖是否全部安装完成:

ldd /app/node_modules/puppeteer/.local-chromium/linux-982053/chrome-linux/chrome | grep "not found"

如果命令执行后无任何输出,说明所有依赖已安装到位,Chromium可以正常启动。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:42:16