#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 внутри него.