Heroku环境下Puppeteer启动Chrome浏览器失败求助
解决方案:Puppeteer启动Chrome提示libatk-1.0.so.0缺失
核心问题分析
你遇到的错误本质是Puppeteer缓存了Linux版本的Chrome,但你的运行系统并非Linux,导致系统无法识别Linux专属的依赖库;或者你误以为没在Linux环境,但实际项目运行在Linux容器/虚拟机中(比如Docker、云服务器)。
具体解决步骤
1. 强制下载对应系统的Chrome版本
- 先删除现有错误的缓存目录:手动删除
/app/.cache/puppeteer文件夹 - 根据你的实际系统设置环境变量,再重新安装依赖:
- Windows系统:
set PUPPETEER_SKIP_DOWNLOAD=false set PUPPETEER_PLATFORM=win32 npm install - macOS Intel芯片:
export PUPPETEER_SKIP_DOWNLOAD=false export PUPPETEER_PLATFORM=darwin npm install - macOS M系列芯片:
export PUPPETEER_SKIP_DOWNLOAD=false export PUPPETEER_PLATFORM=darwin export PUPPETEER_ARCH=arm64 npm install
- Windows系统:
2. 确认运行环境是否为Linux
如果你的项目实际部署在Linux服务器/容器中,直接安装缺失的依赖库:
- Debian/Ubuntu系:
sudo apt-get update && sudo apt-get install -y libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1 libasound2 - CentOS/RHEL系:
sudo yum install -y atk atk-bridge cups libdrm libxkbcommon libXcomposite libXdamage libXfixes libXrandr libgbm alsa-lib
3. 优化Puppeteer启动配置(Linux环境下)
除了已有的无沙箱参数,添加--disable-dev-shm-usage避免共享内存问题:
const browser = await puppeteer.launch({ headless: false, args: [ '--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage' ] })
内容的提问来源于stack exchange,提问作者zirjeo
相关产品推荐
相关产品推荐

