单击按钮后等待ajax请求解析

问题描述 投票:1回答:1
await page.click('.save');

const value = await page.$eval('.myelement', el => { return el.innerHTML });

单击.save按钮会触发更改.myelements值的ajax请求。我如何在$ .eval .myelement之前等待回复?

javascript node.js web-scraping puppeteer
1个回答
1
投票

单击如下按钮时,您可以使用page.waitForNavigation等待任何网络活动完成:

// waits for navigation and clicks promises to resolve
await Promise.all([
    page.waitForNavigation(), // this promise resolves after navigation has finished
    page.click('.save')
]);

const value = await page.$eval('.myelement', el => { return el.innerHTML });

您不应该简单地使用page.waitForNavigation(),因为这可能会导致竞争条件,当网络活动在page.click承诺解决之前已经完成时。

Alternatives

如果这不起作用,你也可以尝试waitUntilnetworkidle0之类的函数的networkidle2选项之一(例如page.waitForNavigation({ waitUntil: 'networkidle0' })

或者,您可以使用page.waitForResponse,以防您想要等待特定的网络资源完成加载,或者有持续的后台流量(因此等待导航完成不是一个选项)。

© www.soinside.com 2019 - 2024. All rights reserved.