【问题标题】:Puppeteer not waiting for timeoutPuppeteer 不等待超时
【发布时间】:2018-06-28 19:12:55
【问题描述】:

我有一个包含公司名称列表的页面。此列表最初受限于 200 个结果,但有一个链接可以将该限制翻倍。每次点击加载时间都会增加几分钟。

我正在使用以下代码。

/**
 * @param {object} page - a puppeteer page object
 * @param {number} by - how many times I need to click on the link
 */
async function multiply(page, by = 5) {
    for (let i = 0; i < by; i++) {
        await Promise.all([
            // Manual clicking of the link
            page.$eval('p a', el => el.click()),

            // set a timeout of 8 minutes
            page.waitForNavigation(480000) 
        ]).catch(e => console.log(e));
    }
}

我预计超时 8 分钟,但我收到以下错误:

Error: Navigation Timeout Exceeded: 30000ms exceeded

我也尝试等待导航点击链接。然后我尝试使用page.waitFor(i ** 2 * 10000) 手动等待定义的超时 - 但没有运气。等待选择器进入 html 也不起作用。

我没有使用page.click('p a'),因为它被确认为错误here

您可能想看看我的项目的另一个already-solved question,它更详细地描述了我的用例。

如果你想仔细看看,你可以点击bitbucket.org/ytNewskews克隆完整的repo。

【问题讨论】:

    标签: javascript node.js puppeteer


    【解决方案1】:

    page.waitForNavigation(options) 需要一个具有如下属性的对象:

       // set a timeout of 8 minutes
       page.waitForNavigation({timeout: 480000})
    

    默认为 30000 毫秒。可以使用 page.setDefaultNavigationTimeout(timeout) 方法更改默认值。

    发件人:Puppeteer API

    【讨论】:

    • 某一天:D
    猜你喜欢
    • 2019-07-07
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 2012-09-20
    相关资源
    最近更新 更多