Предоставляет ли кукловод данные в реальном времени

#javascript #node.js #puppeteer #webautomation

#javascript #node.js #кукловод #веб-автоматизация

Вопрос:

Я пытаюсь в Интернете получать текущие результаты при каждом изменении оценки. Может ли puppeteer это сделать? Если это возможно, что я должен добавить в этот код, чтобы он возвращал текущие данные.

 const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('site to go');
  await page.waitForSelector('input[name="username"]');
  await page.type('input[name="username"]', 'username');
  await page.type('input[name="password"]', 'password');
  await page.click('button[type="submit"]');
  let score = await page.evaluate(() => document.getElementById("scores").innerHTML);
})();
  

Ответ №1:

Вы могли бы использовать exposeFunction для регистрации функции обратного вызова:

 await page.exposeFunction('newScore', s => console.log(s));
  

Затем вы можете вызвать эту функцию в DOMSubtreeModified событии:

 page.evaluate(() => document.getElementById('scores')
  .addEventListener('DOMSubtreeModified', () => newScore(element.innerHTML)));
  

Комментарии:

1. как насчет того, чтобы каждые 10 секунд он возвращал данные

2. @Newboy11 вы могли бы решить это на своей стороне, используя setInterval и вызывая evaluate внутри него.