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

时间:2019-04-04 20:41:05

标签: javascript node.js web-scraping puppeteer

await page.click('.save');

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

单击.save按钮会触发一个更改.myelement值的ajax请求。在$ .eval .myelement之前,我该如何等待该响应?

1 个答案:

答案 0 :(得分: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,因为这可能导致争用情况。

替代项

如果这不起作用,您还可以尝试使用waitUntilnetworkidle0之类的功能的networkidle2选项之一(例如page.waitForNavigation({ waitUntil: 'networkidle0' })

或者,如果您要等待特定的网络资源完成加载或有恒定的后台流量(因此不能选择等待导航完成),则可以使用page.waitForResponse