javascript - 如何重新加载并等待元素出现?

标签 javascript node.js web puppeteer

我尝试寻找这个答案,但互联网上似乎没有答案。我想要做的是使用 Node js 重新加载页面,直到找到带有我想要的查询的元素。如果有帮助的话,我将在程序的其他部分使用 puppeteer。

好吧,我使用了两个答案中的函数并提出了这个,可能是未优化的代码:

const puppeteer = require("puppeteer");

(async () => {
  try {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto("http://127.0.0.1:5500/main.html");
    await page.waitForSelector("#buy-button");
    console.log("worked");
  } catch (err) {
    console.log(`ERROR: ${err}`);
  }
})();  

                              

但是我不知道该怎么做,就是重新加载页面,并不断重新加载,直到出现我想要的 id。例如,不断重新加载 youtube,直到出现您想要的视频(不切实际的例子,但我认为它能说明问题)。

最佳答案

以下是我如何解决等待 puppeteer 中的元素并在未找到时重新加载页面的问题;

async waitForSelectorWithReload(selector: string) {
    const MAX_TRIES = 5;
    let tries = 0;
    while (tries <= MAX_TRIES) {
      try {
        const element = await this.page.waitForSelector(selector, {
          timeout: 5000,
        });
        return element;
      } catch (error) {
        if (tries === MAX_TRIES) throw error;

        tries += 1;
        void this.page.reload();
        await this.page.waitForNavigation({ waitUntil: 'networkidle0' });
      }
    }
  }

并且可以用作;

await waitForSelectorWithReload("input#name")

关于javascript - 如何重新加载并等待元素出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64948077/

相关文章:

javascript - Sequelize如何在结果中返回连接表的列

c# - Razor 语法错误

java - 如何使用 Jsoup 从表中提取文本

javascript - 单击事件将我重定向到网站顶部(内部代码片段)

javascript - Cypress - 使用路由(选项) stub 不起作用

javascript - 如何使用 firebase 云函数查询数据库

c++ - 我们可以使用 C++ 进行 Web 设计/开发/编程吗?

javascript - 使用 jquery addClass、添加文本和删除 li 的对象格式

javascript - 阻止 Smart Client 将 Array 类元素添加到我的数组中

javascript - 如何异步查询多条SQL?