【问题标题】:Use setInterval inside async/await with Puppeteer在 Puppeteer 的 async/await 中使用 setInterval
【发布时间】:2018-06-12 00:17:13
【问题描述】:

谁能回答我,我如何在 page.evaluate 方法中使用setInterval

我需要获取一些动态数据,并每隔500ms将其写入文件 http://tinyimg.io/i/QjusF8x.png

(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://url.com');

// Auth
await page.click(selector.login.tab);
await page.click(selector.login.email);
await page.keyboard.type(settings.username);
await page.click(selector.login.password);
await page.keyboard.type(settings.password);
await page.click(selector.login.button);

// Waiting for loading
await page.waitFor(10000); // TO FIX: there we should wait for loaded element or selector
await page.evaluate(() => {
        setInterval(() => {
            console.log(document.querySelector('div._captions > p._value').innerText + document.querySelector('div._captions p._hl-value').innerText);
        }, 500);
    });

//await page.screenshot({path: 'screenshot.jpg'});
await browser.close();})();

【问题讨论】:

    标签: node.js async-await puppeteer


    【解决方案1】:

    你需要像这样使用 js 方法 Promise():

    await page.evaluate(() => {
        await Promise((resolve, reject) => {
                setInterval(() => {
              console.log(document.querySelector('div._captions > p._value').innerText + document.querySelector('div._captions p._hl-value').innerText);
          }, 500);
        });
      });
    如果您需要完成超时,您可以使用方法 resolve();

    【讨论】:

      猜你喜欢
      • 2021-06-15
      • 2021-08-06
      • 2021-06-05
      • 2021-05-28
      • 2020-10-12
      • 1970-01-01
      • 1970-01-01
      • 2017-01-23
      • 2019-07-16
      相关资源
      最近更新 更多