Запустите функцию кукловода снова до завершения - PullRequest
0 голосов
/ 27 марта 2020

У меня есть функция кукловода, которая запускается по сценарию Node JS, при запуске запускается моя начальная функция, однако после перехода на следующую страницу веб-сайта (в моем примере с использованием btnToClick) она мне нужна переоценить страницу и собрать больше данных. Прямо сейчас я использую setInterval, который предполагает, что общее время на чистку страницы составляет 12 секунд, я хотел бы иметь возможность снова запустить мою функцию extract после ее завершения и продолжать ее до тех пор, пока nextBtn возвращает 0.

Ниже мои текущие настройки:

function extractFromArea() {

  puppeteer.launch({
    headless: true
  }).then(async browser => {

    // go to our page of choice, and wait for the body to load
    const page = await browser.newPage();
    await page.setViewport({ width: 1280, height: 720 });
    await page.goto('mypage');

    const extract = async function() {

      // wait before evaluating the page
      await page.evaluate(() => {

        // next button
        const nextBtn = document.querySelectorAll('a.nav.next.rndBtn.ui_button.primary.taLnk').length
        if (nextBtn < 1) {
          // if no more pages are found
        }

      }


      // wait, then proceed to next page
      setTimeout(() => {
        const btnToClick = document.querySelector('a.nav.next.rndBtn.ui_button.primary.taLnk')
        btnToClick.click()

      }, 2000)

    });

  };

  // TODO: somehow need to make this run again based on when the current extract function is finished.
  setInterval(() => {
     extract()
  }, 12000)

  // kick off the extraction
  extract()

  });
}

1 Ответ

0 голосов
/ 28 марта 2020

Вот как может выглядеть l oop:

while(await page.$('a.next')){
  await page.click('a.next')
  // do something
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...