Javascript 单击按钮后等待解决ajax请求
单击Javascript 单击按钮后等待解决ajax请求,javascript,node.js,web-scraping,puppeteer,Javascript,Node.js,Web Scraping,Puppeteer,单击.save按钮触发一个ajax请求,该请求更改.myelement的值。我如何在I$.eval.myelement之前等待该响应?单击以下按钮时,您可以使用它来等待任何网络活动完成: //等待导航并单击以解决问题 等待承诺([ page.waitForNavigation(),//此承诺在导航完成后解析 页面。单击(“.save”) ]); const value=wait page.$eval('.myelement',el=>{return el.innerHTML}); 您不应该简单
.save
按钮触发一个ajax请求,该请求更改.myelement
的值。我如何在I$.eval.myelement
之前等待该响应?单击以下按钮时,您可以使用它来等待任何网络活动完成:
//等待导航并单击以解决问题
等待承诺([
page.waitForNavigation(),//此承诺在导航完成后解析
页面。单击(“.save”)
]);
const value=wait page.$eval('.myelement',el=>{return el.innerHTML});
您不应该简单地使用page.waitForNavigation()
,因为这可能会导致竞态条件,此时网络活动在页面之前已经完成。单击承诺解决
选择
如果不起作用,您也可以尝试函数的waitUntil
选项之一,如networkidle0
或networkidle2
(例如page.waitForNavigation({waitUntil:'networkidle0'})
或者,如果您想等待特定的网络资源完成加载,或者存在持续的后台流量(因此,等待导航完成不是一个选项),您可以改为使用。您可以尝试。这会导致超时。page.waitFor(2000)是一个邪恶的黑客,但它是有效的。也许这里有一个种族条件。在托马斯·多多夫的答案中看到可能的解决方案。
await page.click('.save');
const value = await page.$eval('.myelement', el => { return el.innerHTML });