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

Puppeteer-core本地运行正常,部署至Vercel后浏览器启动失败

Next.js App Router + Puppeteer 部署Vercel失败解决方案

问题根源

本地正常但Vercel部署失败,核心原因是Vercel Serverless环境没有预装Chrome浏览器,而你使用的puppeteer-core本身不包含浏览器二进制文件,导致启动失败。

具体修复步骤

  1. 替换依赖包
    卸载puppeteer-core,安装完整的puppeteer包(自带适配Serverless环境的Chrome二进制文件):
npm uninstall puppeteer-core
npm install puppeteer

同时修改代码导入:

// 删掉原有的executablePath导入,改成直接导入puppeteer
import puppeteer from "puppeteer";
  1. 调整浏览器启动配置
    Vercel的Serverless环境有内存和权限限制,需要修改launch参数,同时不用手动指定executablePath(puppeteer会自动处理):
browser = await puppeteer.launch({
  headless: "new", // 启用新版无头模式,兼容性更好
  args: [
    "--no-sandbox",
    "--disable-setuid-sandbox",
    "--disable-blink-features=AutomationControlled",
    "--disable-dev-shm-usage", // 解决Vercel临时内存不足问题
    "--single-process", // 适配Serverless单进程环境
  ],
});
  1. 添加Vercel配置文件
    在项目根目录创建vercel.json,确保构建时保留浏览器缓存文件:
{
  "functions": {
    "app/**/*.{js,ts,jsx,tsx}": {
      "includeFiles": ".next/cache/**/*"
    }
  }
}
  1. 强化反爬规避
    Instagram对无头浏览器检测严格,在page.goto前添加以下代码:
// 设置真实用户代理
await page.setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36");

// 禁用自动化检测标识
await page.evaluateOnNewDocument(() => {
  Object.defineProperty(navigator, 'webdriver', {
    get: () => false,
  });
});
  1. 优化错误提示
    原代码把所有错误都归为“用户不存在”,建议区分错误类型:
catch (error) {
  if (error instanceof Error) {
    if (error.message.includes("Failed to launch")) {
      throw new Error("浏览器启动失败:" + error.message);
    } else if (error.message.includes("$eval: failed to find element")) {
      throw new Error("用户不存在或页面结构已变更");
    } else {
      throw new Error("爬取失败:" + error.message);
    }
  } else {
    throw new Error("未知错误");
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 18:05:12