Почему страница. $$ eval работает слишком много раз? - PullRequest
0 голосов
/ 04 апреля 2020

Я хочу построить простого бота с кукловодом. Я использовал страницу. $$ eval, затем я попытался извлечь данные из таблицы (10 страниц) и сопоставил эти данные.

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

Вот мой фрагмент кода:

const tablolariCek = async (url, sayfaSayisi) => {
  const browser = await puppeteer.launch({ headless: false });
  let page = await browser.newPage();
  await page.goto(url);
  await page.waitForSelector('#mydata_next');
  let okulUni = [];
  for (let index = 0; index <= sayfaSayisi; index++) {
    let okullar = await page.$$eval(
      '#mydata > tbody > [role="row"]',
      (uniler) =>
        uniler.map((okul) => {
          //Here is working 10 times per page.
          let uni = {};
          uni.okulkodu = okul.querySelector('a').innerText.trim();
          const fontVeriler = okul.querySelectorAll('font');
          const strongVeriler = okul.querySelectorAll('strong');
          for (let index = 0; index < strongVeriler.length; index++) {
            if (index == 0) {
              uni.uniadi = strongVeriler[index].innerText.trim();
            } else if (index == 1) {
              uni.bolumadi = strongVeriler[index].innerText.trim();
            }
          }
          for (let index = 0; index < fontVeriler.length; index++) {
            if (index == 1) {
              uni.bolumadi += ' ' + fontVeriler[index].innerText.trim();
            } else if (index == 10) {
              uni.siralama2019 = fontVeriler[index].innerText.trim();
            } else if (index == 14) {
              uni.puan2019 = fontVeriler[index].innerText.trim();
            }
          }

          return uni;
        })
    );
    await page.click('#mydata_next');
    okullar.forEach((okul) => {
      okulUni.push(okul);
    });

  }

  browser.close();

  return okulUni;
};

Вот то, что я пытаюсь получить

<table id="mydata">
<tbody>
<tr role="row" class="odd">//this line
</tbody>

Я могу ' не могу найти решение.

Я нашел решение, изменив эту строку.

const browser = await puppeteer.launch({ headless: false });

const browser = await puppeteer.launch({ headless: false,slowMo: 150 });

Я думаю, что из-за скорости Код не может получить таблицу, которая точно верна. Теперь все отлично работает. Спасибо за ответы.

1 Ответ

0 голосов
/ 04 апреля 2020

Я нашел решение, изменив эту строку.

const browser = await puppeteer.launch({ headless: false });

const browser = await puppeteer.launch({ headless: false,slowMo: 150 });

Я думаю, что из-за скорости Код не может получить таблицу, которая точно верна. Теперь все отлично работает. Спасибо за ответы.

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