如何获取一组元素并使用 Puppeteer 单击随机元素

How to get an array of elements and click a random one with Puppeteer

我正在使用 Puppeteer 并给出了一个具有相同标签结构的主题列表,我需要点击一个随机的主题。 如果我使用 document.querySelector 并单击一个随机主题,它会起作用,但我不确定我是否可以使用 page.evaluate,因为稍后我需要再次重复单击并确保之前的主题。

我得到的错误是:

UnhandledPromiseRejectionWarning: TypeError: page.$(...).click is not a function

调试主题数组后,我得到一个 ElementHandle 数组,随机数为 -1。

我的代码是这样的:

  await page.waitForSelector('.o-topicselect__list');
  // get the all li elements
  const topics = await page.$$('.o-topicselect__list li')
  // create a random number from 0 to the topics.length-1
  const randomNumber = Math.floor(Math.random() * topics.length - 1);
  // click a random topic
  await page.$(`.o-topicselect__list li:nth-child(${randomNumber}) a`).click()

非常感谢任何帮助。

问题是您正试图 运行 .click() 承诺。需要先等待page.$返回的promise解析为ElementHandle,然后点击:

let link = await page.$(`.o-topicselect__list li:nth-child(${randomNumber}) a`);
await link.click();