首页 > 解决方案 > 单击按钮后等待ajax请求解决

问题描述

await page.click('.save');

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

单击.saveButton 会触发更改.myelements 值的 ajax 请求。我如何在 $.eval 之前等待该响应.myelement

标签: javascriptnode.jsweb-scrapingpuppeteer

解决方案


单击如下按钮时,您可以使用它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

备择方案

如果这不起作用,您还可以尝试使用waitUntilnetworkidle0networkidle2例如page.waitForNavigation({ waitUntil: 'networkidle0' }).

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


推荐阅读