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

使用Puppeteer无头Chrome执行脚本时遇导航超时及未处理Promise拒绝错误

解决Puppeteer导航超时与未处理Promise拒绝警告

嘿,看来你的脚本功能正常但卡在了超时警告上,我来帮你捋清楚怎么解决这个问题!

首先,这个Navigation Timeout Exceeded错误是因为Puppeteer默认的导航超时时间是30秒,你的页面加载(或者某个导航操作)花了超过30秒才完成,而未处理的Promise拒绝警告则是因为你没有捕获这个超时错误导致的。下面是几个实用的解决办法:

1. 延长导航超时时间

最直接的办法就是给导航相关的方法(比如page.goto、page.waitForNavigation)设置更长的超时时间。比如把超时改成60秒:

await page.goto('你的目标URL', { timeout: 60000 }); // 60000毫秒=60秒

如果不确定页面加载需要多久,也可以暂时设置为0禁用超时(但不推荐长期这么用,避免无限等待):

await page.goto('你的目标URL', { timeout: 0 });

2. 捕获Promise错误,消除警告

不管超时与否,都要给异步的导航操作加上错误捕获,这样就不会抛出UnhandledPromiseRejectionWarning了。推荐用try/catch包裹:

try {
  await page.goto('你的目标URL', { timeout: 60000 });
  // 其他页面操作
} catch (error) {
  console.error('导航过程中出现错误:', error);
  // 这里可以加重试逻辑,或者根据错误类型做对应处理
}

3. 优化页面加载速度

如果页面加载慢是因为加载了大量不必要的资源(比如图片、广告脚本),可以拦截这些请求来加快加载:

// 启用请求拦截
await page.setRequestInterception(true);
page.on('request', (request) => {
  // 拦截图片、样式表这类非必要资源
  if (['image', 'stylesheet', 'font'].includes(request.resourceType())) {
    request.abort();
  } else {
    request.continue();
  }
});

4. 改用元素等待替代导航等待

如果你的页面是单页应用(SPA),或者导航完成后还有动态内容加载,waitForNavigation可能不准确。这时候可以直接等待关键元素出现,代替依赖导航事件:

await page.goto('你的目标URL', { timeout: 60000 });
// 等待页面上的某个关键元素加载完成
await page.waitForSelector('#某个关键元素ID', { timeout: 30000 });

先试试延长超时时间加上错误捕获,应该就能解决你遇到的警告和超时问题了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:32:09