javascript - Puppeteer 不等待超时

标签 javascript node.js puppeteer

我有一个包含公司名称列表的页面。该列表最初限制为 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 克隆完整的存储库.

最佳答案

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

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

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

来自:Puppeteer API

关于javascript - Puppeteer 不等待超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51089850/

相关文章:

javascript - 为什么这个简单的 "drag to resize block"JavaScript 在 Chrome 中不起作用?

JavaScript 使用另一个数组过滤一个对象数组

node.js - 须藤 : npm: command not found

node.js - express-session 中 "saveUninitialized","resave"和 "rolling"属性的确切含义是什么?

json - 通过 JSON-RPC 的 NodeJS POST 请求

javascript - node.js win10 puppeteerexecutablePath 字符串

javascript - 尝试使用列样式和每列 4 个 div,但样式不正确

Javascript:通用获取数组中的下一个项目

javascript - 为什么 Puppeteer 不支持多次上传?

javascript - Puppeteer:打开一个页面,获取数据,返回上一页,进入新页面获取数据