puppeteer:如何在 SPA 中等待页面?

Nag*_*sad 7 javascript node.js puppeteer

我正在尝试使用 puppeteer 浏览 SPA,我在这里面临的问题是我无法等待页面加载然后继续我的程序。

我填写了一个表格,然后点击提交,根据表格的内容,可以加载不同的页面,所以我不能使用,page.waitFor(Selector)因为根据输入可以有很多不同的页面。

我尝试使用waitUntil:load、networkidle2、networkidle0、domcontentloaded,但它们都在元素加载之前触发。

我试图自动化的页面是Link。(如果你想自己检查,然后选择预订参考并填写随机详细信息,然后按继续。)

在链接中选择“预订参考”后,我用 puppeteer 填写详细信息,然后按继续按钮,我无法弄清楚如何在不依赖选择器的情况下等待页面完全加载。

Eve*_*tss 5

我想你应该知道这些页面和使用Promise.racepage.waitFor每一页,就像这样:

const puppeteer = require('puppeteer');

const html = `
<html>
  <body>
    <div id="element"></div>
    <button id="button">load</button>

    <script>
      document.getElementById('button').addEventListener("click", () => {
        document.getElementById('element').innerHTML =
          '<div id="element' + (Math.floor(Math.random() * 3) + 1)  + '"></div>';
      });
    </script>
  </body>
</html>`;

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto(`data:text/html,${html}`);

  await page.click('#button');

  const element = await Promise.race([
    page.waitFor('#element1'),
    page.waitFor('#element2'),
    page.waitFor('#element3')
  ]);

  console.log(await (await element.getProperty('id')).jsonValue());
  await browser.close();
})();
Run Code Online (Sandbox Code Playgroud)