Кукольник оценивает функцию - PullRequest
0 голосов
/ 23 декабря 2018

Я новичок в кукловодстве, и я пытаюсь понять, как он работает на некоторых примерах:

Итак, в основном, в этом примере я пытаюсь извлечь количество просмотровYouTube видео.Я написал строку js на консоли Chrome, которая позволяет мне извлечь эту информацию:

document.querySelector('#count > yt-view-count-renderer > span.view-count.style-scope.yt-view-count-renderer').innerText

Что сработало хорошо.Однако, когда я сделал то же самое с моим кодом кукловода, он не распознал элемент, который я запрашивал.

const puppeteer = require('puppeteer')

const getData = async () => {
  const browser = await puppeteer.launch()
  const page = await browser.newPage()

  await page.goto('https://www.youtube.com/watch?v=T5GSLc-i5Xo')
  
  await page.waitFor(1000)

  const result = await page.evaluate(() => {
    let views = document.querySelector('#count > yt-view-count-renderer > span.view-count.style-scope.yt-view-count-renderer').innerText
    return {views}
  })

  browser.close()
  return result
}

getData().then(value => {
  console.log(value)
})

Я наконец сделал это, используя объект ytInitialData.Однако я хотел бы понять причину, по которой мой первый код не работал.

Спасибо

1 Ответ

0 голосов
/ 23 декабря 2018

Кажется, что ждать 1000 недостаточно.

Попробуйте ваше решение с https://try -puppeteer.appspot.com / , и вы увидите.

Однако, если вы попробуете следующее решение, вы получите правильноерезультат

const browser = await puppeteer.launch();

const page = await browser.newPage();
await page.goto('https://www.youtube.com/watch?v=T5GSLc-i5Xo');

await page.waitForSelector('span.view-count');
const views = await page.evaluate(() => document.querySelector('span.view-count').textContent);
console.log('Number of views: ' + views);

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