单击按钮并等待 puppeteer 中的网络响应

问题描述 投票:0回答:1

我试图点击循环中的一个按钮从服务器加载数据。 每次单击时,按钮都会向服务器发出网络请求,然后显示从服务器获取的数据。

我想做的是在进行下一次点击/下一次迭代之前等待服务器的响应。这是我到目前为止所做的。

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 文档中获得解决方案,但没有任何帮助我解决这个问题。

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

试试

await page.waitForNavigation({ waitUntil: "networkidle2" });
© www.soinside.com 2019 - 2024. All rights reserved.