Используйте setInterval внутри async / await с Puppeteer - PullRequest
0 голосов
/ 08 июня 2018

Может ли кто-нибудь ответить мне, как я могу использовать setInterval в методе page.evaluate ?

Мне нужно получить некоторые динамические данные и записывать их в файл каждые 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();})();

1 Ответ

0 голосов
/ 11 июня 2018

Вам нужно использовать 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);
    });
  });
Если вам нужно закончить тайм-аут, вы можете использовать метод resol ();
...