Puppeteer - 按类名计数元素

11

我正在尝试将具有特定类名的所有元素信息存储到数组中。

问题在于这是一个动态生成的HTML页面,只要我向下滚动,就会出现新的该类名元素。

幸运的是,我预先知道有多少这样的元素存在。

因此,我的假设解决方案是检查具有该特定类名的元素数量,并只要该数字小于我所知道的数字,就一直向下滚动。

问题是我不知道如何在puppeteer中精确地计算特定类名的元素数量,而API也没有提供帮助。


类似于 getElementsByClassName(".someclass").length 的东西? - Jonas Wilms
在 Puppeteer 中,这个能用吗? - user1584421
1个回答

17

我认为这就是您在寻找的东西。

const puppeteer = require('puppeteer')

async function count () {
  const browser = await puppeteer.launch()
  const page = await browser.newPage()
  await page.goto('https://news.ycombinator.com', {waitUntil: 'networkidle2'})
  await page.evaluate(_ => {
    window.scrollBy(0, window.innerHeight)
  })

  console.log('how many?', (await page.$$('td.title')).length)

  await browser.close()
}

count()

谢谢!我写了这个: await page.evaluate(() => { while (await page.$$('.ftS3w _hd9n').length < counter) { window.scrollBy(0, window.innerHeight); } }); 但是我收到一个错误,即while循环中的'page'旁边的await是意外的标识符。 - user1584421
你是否尝试滚动包含项目的元素而不是窗口? - Simone Sanfratello
1
嗨!如果您想的话,可以看一下这个链接:https://stackoverflow.com/questions/50709049/puppeteer-infinite-scrolling-situation。非常感谢! - user1584421
运行完美,谢谢! - eugene.polschikov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接