javascript - 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')
,因为它在这里被确认为一个错误。
您可能想看看我的项目中另一个 已经解决的问题,它更详细地描述了我的用例。
如果您想仔细查看,可以通过单击bitbucket.org/ytNewskews克隆完整的 repo 。
解决方案
page.waitForNavigation(options)
期望一个具有如下属性的对象:
// set a timeout of 8 minutes
page.waitForNavigation({timeout: 480000})
默认值为 30000 毫秒。可以使用 page.setDefaultNavigationTimeout(timeout) 方法更改默认值。