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

Puppeteer 16.1.1与chrome-aws-lambda 10.1.0兼容异常求助

解决AWS Lambda升级Node.js 16.x+Puppeteer 16.1.1后的PDF生成报错问题

问题背景

原Node.js 12.x + Puppeteer v13.7.0 + chrome-aws-lambda v10.1.0组合在AWS Lambda中生成PDF正常,升级至Node.js 16.x、Puppeteer v16.1.1后出现以下错误:

error: Error: ENOENT: no such file or directory, mkdtemp 'undefined\temp\puppeteer_dev_chrome_profile-XXXXXX' {errno: -4058, code: 'ENOENT', syscall: 'mkdtemp', path: 'undefined\temp\puppeteer_dev_chrome_profile-XXXXXX', stack: 'Error: ENOENT: no such file or directory, mkd…ned\temp\puppeteer_dev_chrome_profile-XXXXXX'', …}
code: 'ENOENT'
errno: -4058
path: 'undefined\temp\puppeteer_dev_chrome_profile-XXXXXX'
syscall: 'mkdtemp'
message: 'ENOENT: no such file or directory, mkdtemp 'undefined\temp\

解决方案

1. 匹配chrome-aws-lambda与Puppeteer版本

旧版chrome-aws-lambda v10.1.0不兼容Puppeteer 16.x,需安装对应版本的依赖:

npm install chrome-aws-lambda@16.1.1

(版本号需与Puppeteer完全一致,确保Chromium二进制文件匹配)

2. 手动指定临时目录路径

报错核心是Puppeteer无法识别正确的临时目录路径(出现undefined),需在浏览器启动配置中明确指定userDataDir为Lambda默认临时目录/tmp下的路径:

const fs = require('fs');
const puppeteer = require('puppeteer-core');
const chrome = require('chrome-aws-lambda');

// 提前创建临时目录确保存在
const tempProfileDir = '/tmp/puppeteer_dev_chrome_profile';
fs.mkdirSync(tempProfileDir, { recursive: true });

const browser = await puppeteer.launch({
  args: chrome.args,
  executablePath: await chrome.executablePath,
  headless: chrome.headless,
  userDataDir: tempProfileDir,
  ignoreHTTPSErrors: true,
});

3. 调整环境变量读取逻辑

Node.js 16.x对环境变量的处理有变化,可通过系统环境变量动态获取临时目录:

const tempProfileDir = `${process.env.TMPDIR}/puppeteer_dev_chrome_profile`;

4. 确认Lambda权限

确保Lambda执行角色拥有/tmp目录的读写权限(默认已具备,若自定义权限策略需验证)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 02:01:15