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

使用Puppeteer生成PDF遭遇TimeoutError,如何解决该问题?

解决Puppeteer生成PDF超时的方案

以下是几个能解决你遇到的超时问题的实用调整:

1. 优化page.goto的等待策略和超时设置

默认的page.goto会等待页面完全触发load事件,若页面存在大量异步加载资源,极易触发超时。可修改等待条件并延长超时阈值:

await page.goto('https://example.com', {
  waitUntil: 'networkidle2', // 当网络活跃连接数降至2以下时,判定页面加载完成
  timeout: 60000 // 延长超时到60秒,可根据实际情况调整
});

networkidle2兼顾了加载完整性和速度,适合多数场景;若仅需DOM结构加载完成,也可使用domcontentloaded。

2. 为page.pdf单独配置超时

确保为PDF生成过程单独设置超时参数:

const pdfOptions = {
  path: "out.pdf",
  timeout: 60000 // 给PDF渲染步骤分配足够时长
};

3. 启用新版无头模式

Puppeteer v19+起,推荐使用新版无头模式,旧版headless: true基于老版本Chrome,可能存在兼容性问题:

const browser = await puppeteer.launch({
  headless: "new", // 启用新版无头模式
  args: ['--no-sandbox', '--disable-setuid-sandbox'] // 避免部分环境下的权限阻塞问题
});

4. 排查网络与环境问题

  • 确认运行环境可正常访问目标网站(如手动打开https://example.com测试)
  • 若在内网环境,检查代理、防火墙设置,避免资源加载被拦截

调整后的完整代码示例

import puppeteer from 'puppeteer';

// Launch the browser and open a new blank page
const browser = await puppeteer.launch({
  headless: "new",
  args: ['--no-sandbox', '--disable-setuid-sandbox']
});
const page = await browser.newPage();

// Navigate with optimized wait settings
await page.goto('https://example.com', {
  waitUntil: 'networkidle2',
  timeout: 60000
});

// Configure PDF options
const pdfOptions = {
  path: "out.pdf",
  timeout: 60000
};

console.log("Printing pdf");

await page.pdf(pdfOptions);

await browser.close();

console.log("DONE");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 19:52:15