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

Vercel无服务器环境下Puppeteer找不到Chrome的问题咨询

在Vercel部署Next.js应用时运行Puppeteer的问题

错误信息

Error: Could not find Chrome (ver. 121.0.6167.85). This can occur if either
 1. you did not perform an installation before running the script (e.g. `npx puppeteer browsers install chrome`) or
 2. your cache path is incorrectly configured (which is: /home/sbx_user1051/.cache/puppeteer).

已尝试的操作

  • 在package.json中添加"postinstall": "npx puppeteer browsers install chrome"
  • 在vercel.json中设置"buildCommand": "npx puppeteer browsers install chrome && next build"
  • 在next.config.js中将Puppeteer加入serverComponentsExternalPackages:
experimental: {
  serverComponentsExternalPackages: ["puppeteer"],
},
  • 在代码中指定Chrome可执行文件路径:
const browser = await puppeteer.launch({
  headless: true,
  executablePath: "/usr/bin/chromium-browser",
  args: ["--no-sandbox", "--disable-setuid-sandbox"],
});

环境信息

  • Next.js 15.1.2
  • Puppeteer 21.5.2
  • @axe-core/puppeteer 4.7.3
  • Vercel无服务器部署

问题解答

1. 如何确保Vercel无服务器环境中存在Chrome?

  • 改用puppeteer-core替代puppeteer:puppeteer会自动下载浏览器,但Vercel无服务器环境的缓存限制会导致下载的浏览器无法持久化。puppeteer-core仅提供API层,不自带浏览器,可配合Vercel预装的Chromium使用。
  • 指定Vercel预装Chromium路径:Vercel环境默认预装了Chromium,路径为/usr/bin/chromium-browser。需配合puppeteer-core使用,并调整启动参数适配无服务器环境:
    import puppeteer from 'puppeteer-core';
    
    const browser = await puppeteer.launch({
      headless: 'new',
      executablePath: '/usr/bin/chromium-browser',
      args: [
        '--no-sandbox',
        '--disable-setuid-sandbox',
        '--disable-dev-shm-usage',
        '--no-first-run',
        '--single-process'
      ]
    });
    
  • 调整Puppeteer缓存路径:Vercel无服务器环境中/tmp目录可写且临时持久,可通过环境变量指定缓存路径:
    PUPPETEER_CACHE_DIR=/tmp/puppeteer npx puppeteer browsers install chrome
    
    或在代码中提前设置:
    process.env.PUPPETEER_CACHE_DIR = '/tmp/puppeteer';
    

2. 在无服务器函数中运行浏览器自动化是否有更优方案?

  • 使用托管浏览器自动化服务:将浏览器运行在专门的托管服务,Vercel函数仅通过API调用执行自动化任务,规避无服务器环境的内存、执行时间限制,同时减少函数启动开销。
  • 切换到Vercel Edge Functions:Edge环境的资源限制相对宽松,适合轻量自动化任务。配合puppeteer-core使用,能获得更快的冷启动速度。
  • 优化浏览器启动参数:启用headless: 'new'模式(比旧版无头模式更高效),添加--disable-dev-shm-usage避免共享内存不足,--single-process减少资源占用,进一步适配无服务器环境。
  • 复用远程浏览器实例:如果自动化任务频繁,可连接到长期运行的远程浏览器实例,避免每次函数调用都启动新浏览器,大幅降低延迟。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 05:03:26