Мое событие щелчка не вызывает навигацию, как я могу знать, что событие закончилось с Puppeteer? - PullRequest
0 голосов
/ 30 мая 2018

Привет, я пытаюсь получить информацию из таблицы, но в этой таблице есть кнопка разбиения на страницы («далее, предыдущая»), и когда я нажимаю кнопку «Далее», навигация не вызывается (просто создается запрос POST, который возвращает новыйHTML таблица).

Моя лучшая идея на данный момент:

1) когда я нажимаю следующую кнопку, это вызывает POST (не навигацию), как я могу дождаться завершения этого POST, прежде чем пытатьсяснова захватить данные со следующей страницы?

2) может быть, я могу обнаружить некоторые изменения в элементе таблицы, но я не знаю, как

3) каков наилучший подход дляэта проблема?

сейчас я делаю это:

  while (await page.$(NEXT_BUTTON_SELECTOR) !== null) {
   await page.click(NEXT_BUTTON_SELECTOR);
   await page.waitFor(2 * 1000);
   pageTableArray = getData();
}

но я не убежден, я надеюсь найти какую-то помощь, это сводит меня с ума

Спасибо!

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Вы можете использовать событие requestfinished для захвата данных.

const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setRequestInterception(true);
page.on('request', req => {
    console.log('request:', req.url())
    req.continue();
});
page.on('requestfinished', (req) => {
    console.log('finished:', req.url())
});
page.on('requestfailed', (req) => {
    console.log('failed:', req.url())
})
await page.goto(url);
await page.click(selector);
0 голосов
/ 30 мая 2018

Если await page.click(NEXT_BUTTON_SELECTOR); вызывает загрузку страницы, тогда все, что происходит дальше в скрипте, теряется.Чтобы обойти это, вам нужно сделать:

page.click(NEXT_BUTTON_SELECTOR); // Notice no `await`
await page.waitForNavigation();

Узнайте больше об этом API со страницы документации здесь !

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...