我试图点击循环中的一个按钮从服务器加载数据。 每次单击时,按钮都会向服务器发出网络请求,然后显示从服务器获取的数据。
我想做的是在进行下一次点击/下一次迭代之前等待服务器的响应。这是我到目前为止所做的。
let count = 0;
while (true) {
try {
/**
* click then wait for a response.
*/
await page.waitForSelector(".loadmoredata");
await page.click(".loadmoredata");
console.log("clicked", count);
// logic to wait for a response but it's not working
const response = await page.waitForResponse((response) => {
if (response.status() !== 200) return false;
return true;
});
if (!response) {
page.waitForTimeout(5000);
}
} catch (error) {
if (error instanceof errors.TimeoutError) {
break;
}
}
count++;
}
每当响应有点晚时我运行代码时循环继续迭代并且不等待响应。 预期输出: 点击 0
点击 1
点击 2
点击 3
点击 4
这些额外的迭代是因为它不等待响应。我在互联网上搜索并试图从 puppeteer 的 API 文档中获得解决方案,但没有任何帮助我解决这个问题。
试试
await page.waitForNavigation({ waitUntil: "networkidle2" });