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

如何检查或避免ERR_TIMED_OUT错误?网页抓取时偶发该错误的捕获与循环重试方案

捕获Puppeteer中的ERR_TIMED_OUT错误并实现重试逻辑

我来帮你解决这个问题——你遇到的ERR_TIMED_OUT是Puppeteer在等待响应超时后抛出的异常,我们可以通过try/catch捕获它,再配合循环实现自动重试的逻辑。下面是具体的解决方案:

核心思路

page.waitForResponse在超时未匹配到目标响应时会抛出TimeoutError,我们可以用try/catch块捕获这个错误,然后在循环中重复执行请求逻辑,直到成功或达到最大重试次数。

修改后的完整代码示例

把你的响应等待逻辑封装成一个带重试的异步函数,这样更易复用和维护:

async function waitForCloudfrontResponse(page, maxRetries = 3) {
  let retryCount = 0;
  
  while (retryCount < maxRetries) {
    try {
      console.log(`Waiting for cloudfront response (attempt ${retryCount + 1})...`);
      // 显式设置超时时间(默认30000ms,可根据需求调整)
      const response = await page.waitForResponse(
        (response) => response.url().includes('cloudfront.net'),
        { timeout: 30000 }
      );
      console.log(`Response received: ${response.status()}`);
      return response;
    } catch (error) {
      // 判断是否是超时相关错误
      const isTimeoutError = error.name === 'TimeoutError' || error.message.includes('ERR_TIMED_OUT');
      if (isTimeoutError) {
        retryCount++;
        console.log(`Request timed out (ERR_TIMED_OUT), retrying... (${retryCount}/${maxRetries})`);
        // 重试前短暂延迟,避免频繁请求给服务器造成压力
        await new Promise(resolve => setTimeout(resolve, 2000));
      } else {
        // 非超时错误直接抛出,不重试(比如网络连接错误等)
        throw error;
      }
    }
  }
  
  // 所有重试都失败时抛出最终错误
  throw new Error(`Failed to get cloudfront response after ${maxRetries} attempts`);
}

// 使用示例(替换你原来的响应等待代码)
// const response = await waitForCloudfrontResponse(page);

关键细节说明

  • 重试次数控制:通过maxRetries参数设置最大重试次数,避免无限循环
  • 超时时间自定义:在page.waitForResponse中显式设置timeout,比默认值更灵活
  • 精准捕获错误:只针对超时类错误进行重试,其他异常(如网络断开)直接抛出,避免无效重试
  • 延迟重试:加入短暂的延迟,防止短时间内重复请求触发网站反爬机制

关于crbug日志的说明

你看到的crbug/1173575, non-JS module files deprecated是Chrome内核的警告信息,不是功能错误,不会影响你的爬虫流程。如果觉得日志太冗余,可以在启动Puppeteer时调整日志级别来屏蔽:

const browser = await puppeteer.launch({
  args: ['--disable-dev-shm-usage'],
  defaultViewport: null,
  // 只输出警告及以上级别的日志
  logLevel: 'warn',
  // 关闭标准输出/错误流的打印
  dumpio: false
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 11:47:30