个性化阅读
专注于IT技术分析

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

本文概述

在我的工作和个人项目中完成多项任务的自动化过程中, 我决定使用Puppeteer, 而不是原来的PhantomJS。由于广告, 图像等原因, 包含大量内容的页面最常见的问题之一是加载时间, 页面加载超过30000ms(30秒)后会引发异常(特别是TimeoutError)完全。

要解决此问题, 你将有2个选项, 要么增加配置中的超时时间, 要么完全删除它。就个人而言, 我更喜欢取消限制, 因为我知道与我合作的页面最终有一天会加载。

在本文中, 我将向你简要介绍两种绕过此限制的方法。

A.全局选项卡

当我在同一选项卡中浏览多个页面时, 我更喜欢的选项是删除用于浏览的选项卡上的超时限制。例如, 要删除限制, 你应该添加:

await page.setDefaultNavigationTimeout(0); 

在Puppeteer的已创建页面上可用的setDefaultNavigationTimeout方法允许你定义选项卡的超时, 并希望将其作为第一个参数(以毫秒为单位)。值为0表示时间不受限制。以下代码段显示了如何在实际示例中执行此操作:

// Require puppeteer
const 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 page
    const page = await browser.newPage();

    // Configure the navigation timeout
    await page.setDefaultNavigationTimeout(0);

    // Navigate to some website e.g Our Code World
    await page.goto('http://ourcodeworld.com');

    // Do your stuff
    // ...
})();

B.在当前页面上

另外, 对于特定页面, 如果你处理多个页面使用不同的变量, 则应该能够在page.goto方法的配置对象中作为选项来指定上下文限制:

await page.goto('https://ourcodeworld.com', {
    waitUntil: 'load', // Remove the timeout
    timeout: 0
});

以下代码段在一个真实的示例中显示了如何执行此操作:

// Require puppeteer
const 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 page
    const page = await browser.newPage();

    // Configure the navigation timeout
    await page.goto('https://ourcodeworld.com', {
        waitUntil: 'load', // Remove the timeout
        timeout: 0
    });

    // Navigate to some website e.g Our Code World
    await page.goto('http://ourcodeworld.com');

    // Do your stuff
    // ...
})();

编码愉快!

赞(0)
未经允许不得转载:srcmini » 如何解决Puppeteer TimeoutError:导航超时超过30000 ms

评论 抢沙发

评论前必须登录!