Очистите сайт Dynami c с помощью кукловода - PullRequest
0 голосов
/ 08 марта 2020

Я пытаюсь создать простой скребок, который очистит сайт Trailblazer Profile . Я хочу получить количество значков и баллов пользователя.

Поэтому я использую cheerio и puppeteer для выполнения sh этого.

вот мой код ->

 .get("/:profile", (req,res,next) => {

  const url = "https://trailblazer.me/id/hverma99";

  async function getPage(url) {
    const browser = await puppeteer.launch({headless: true});
    const page = await browser.newPage();
    await page.goto(url, {waitUntil: 'networkidle0'});

    const html = await page.content(); // serialized HTML of page DOM.
    await browser.close();
    return html;
  }

  const html = getPage(url);
  const $ = cheerio.load(html);
  const span = $('.tds-tally__count.tds-tally__count_success');
  console.log(span.text());

});

параметр профиля на данный момент не используется, так как я просто проверяю это.

Проблема: всякий раз, когда я запускаю этот код, я не получаю ничего напечатанного на консоли и если я попробую без кукловода, я получу только html без каких-либо данных. Мой ожидаемый результат - количество значков и баллов.

Дайте мне знать, что не так с этим кодом.

Спасибо

1 Ответ

1 голос
/ 08 марта 2020

Все правильно. Все, что вам нужно сделать, это await ваш getPage вызов, поскольку он асин c. попробуйте это

.get("/:profile", async (req,res,next) => {

  const url = "https://trailblazer.me/id/hverma99";

  async function getPage(url) {
    const browser = await puppeteer.launch({headless: true});
    const page = await browser.newPage();
    await page.goto(url, {waitUntil: 'networkidle0'});

    const html = await page.content(); // serialized HTML of page DOM.
    await browser.close();
    return html;
  }

  const html = await getPage(url);
  const $ = cheerio.load(html);
  const span = $('.tds-tally__count.tds-tally__count_success');
  console.log(span.text());

});

Также нужно поставить async вот так - async (req,res,next)

...