Puppeteer:在 page.$eval 中执行 element.click()

Puppeteer: performing element.click() inside page.$eval

如果 pageFunction 本身 return 是一个承诺,page.$eval and page.$$eval 方法都会 return 一个值(我想如果他们不这样做的话,这对 puppeteer 来说是非常罕见的情况,大多数人偶操作方法 return 承诺)。

page.$$eval(selector, pageFunction[, ...args])

记录的用例都是return值:

const divCount = await page.$$eval('div', divs => divs.length);
const options = await page.$$eval('div > span.options', options => options.map(option => option.textContent));

问题

但是我们可以使用 page.$eval/page.$$eval 来执行仅与浏览器交互而没有 return 可用值的方法(如 element.clickpage.type), 特别是如果出于非常相似的原因我们认为它是 bad practice to use Array.map 而我们不使用 returned 数组? 我很好奇,因为这样我们可以简化使用 .

的场景

它确实有效,但我们应该使用它吗?

const clickAll = await page.$$eval('button', links => links.forEach(link => link.click()));

注意: 将其设为 const 对我来说意义不大,因为我们无法在其他任何地方使用 clickAll 引用。我宁愿自己使用它而不声明它。

你可以认为这是一个正常的 javascript function 它可以 return 一个值也可以不是,你可以使用那个 return 函数也可以不使用。您不需要那个 clickAll 变量。

await page.$$eval('button', links => links.forEach(link => link.click()));