如何获取一组元素并使用 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();
我正在使用 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();