代码之家  ›  专栏  ›  技术社区  ›  elkolotfi

木偶师评估功能

  •  1
  • elkolotfi  · 技术社区  · 7 年前

    我对Pupetter还不熟悉,我正试图通过一些例子来了解它是如何工作的:

    所以基本上我在这个例子中要做的就是提取一个Youtube视频的浏览量。我在Chrome控制台上写了一行js代码,可以提取以下信息:

    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 回复  |  直到 7 年前
        1
  •  3
  •   Milan Hlinák    7 年前

    看来等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();
    
    推荐文章