Нажав на кнопку «Загрузить еще» через кукловод - PullRequest
0 голосов
/ 19 ноября 2018

Я новичок в JS. Мне нужно разобрать комментарии из Instagram, но сначала мне нужно загрузить их все. Я использую Puppeteer в Node.js, поэтому я написал этот код:

await page.evaluate(() => {
    while(document.querySelector('main').querySelector('ul').querySelector('button'))
      document.querySelector('main').querySelector('ul').querySelector('button').click()
  })

Он ничего не делает и запускает бесконечный цикл. Я пытался сделать тайм-аут внутри цикла и так далее ... Я ожидаю, что код проверит, существует ли эта кнопка, и если true, нажмите на нее, пока она существует, загружая все больше и больше комментариев. Я не могу понять, что я делаю не так.

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Вместо использования цикла while() вы можете использовать setInterval() для замедления каждой итерации до более управляемого темпа при загрузке комментариев:

await page.evaluate(async () => {
  await new Promise((resolve, reject) => {
    const interval = setInterval(() => {
      const button = document.querySelector('main ul button');
      if (button !== null) {
        button.click();
      } else {
        clearInterval(interval);
        resolve();
      }
    }, 100);
  });
});
0 голосов
/ 19 ноября 2018

Посмотрите на мой ответ на вопрос, очень похожий на этот, здесь:
Puppeteer / Node.js, чтобы нажать кнопку, пока она существует - и когда она больше не существует, начать действие

Вы должны быть в состоянии применить его для поиска и постоянного нажатия на кнопку «Загрузить еще».

...