如何解决Puppeteer TimeoutError(导航超时超过30000 ms)

本文概述

  • A.全局选项卡
  • B.在当前页面上
在我的工作和个人项目中完成多项任务的自动化过程中, 我决定使用Puppeteer, 而不是原来的PhantomJS。由于广告, 图像等原因, 包含大量内容的页面最常见的问题之一是加载时间, 页面加载超过30000ms(30秒)后会引发异常(特别是TimeoutError)完全。
要解决此问题, 你将有2个选项, 要么增加配置中的超时时间, 要么完全删除它。就个人而言, 我更喜欢取消限制, 因为我知道与我合作的页面最终有一天会加载。
在本文中, 我将向你简要介绍两种绕过此限制的方法。
A.全局选项卡当我在同一选项卡中浏览多个页面时, 我更喜欢的选项是删除用于浏览的选项卡上的超时限制。例如, 要删除限制, 你应该添加:
await page.setDefaultNavigationTimeout(0);

在Puppeteer的已创建页面上可用的setDefaultNavigationTimeout方法允许你定义选项卡的超时, 并希望将其作为第一个参数(以毫秒为单位)。值为0表示时间不受限制。以下代码段显示了如何在实际示例中执行此操作:
// Require puppeteerconst puppeteer = require('puppeteer'); (async () => {// Create an instance of the chrome browser// But disable headless mode !const browser = await puppeteer.launch({headless: false}); // Create a new pageconst page = await browser.newPage(); // Configure the navigation timeoutawait page.setDefaultNavigationTimeout(0); // Navigate to some website e.g Our Code Worldawait page.goto('http://ourcodeworld.com'); // Do your stuff// ...})();

B.在当前页面上另外, 对于特定页面, 如果你处理多个页面使用不同的变量, 则应该能够在page.goto方法的配置对象中作为选项来指定上下文限制:
await page.goto('https://ourcodeworld.com', {waitUntil: 'load', // Remove the timeouttimeout: 0});

以下代码段在一个真实的示例中显示了如何执行此操作:
// Require puppeteerconst puppeteer = require('puppeteer'); (async () => {// Create an instance of the chrome browser// But disable headless mode !const browser = await puppeteer.launch({headless: false}); // Create a new pageconst page = await browser.newPage(); // Configure the navigation timeoutawait page.goto('https://ourcodeworld.com', {waitUntil: 'load', // Remove the timeouttimeout: 0}); // Navigate to some website e.g Our Code Worldawait page.goto('http://ourcodeworld.com'); // Do your stuff// ...})();

【如何解决Puppeteer TimeoutError(导航超时超过30000 ms)】编码愉快!

    推荐阅读