3

如果自身返回一个承诺,则page.$evalandpage.$$eval方法都返回一个值pageFunction(我想如果他们不这样做,puppeteer 的情况非常罕见,大多数 puppeteer 方法都返回承诺)。

page.$$eval(选择器, pageFunction[, ...args])

记录的用例都返回一个值:

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来执行只与浏览器交互而不返回可用值(如element.clickor page.type)的方法,特别是如果出于非常相似的原因,我们认为在不使用返回的数组时使用它是一种不好的做法?Array.map我很好奇,因为这样我们可以简化使用Array.forEach有问题的场景。

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

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

注意:将其设为 aconst对我来说意义不大,因为我们不能clickAll在其他任何地方使用该参考。我宁愿自己使用它而不声明它。

4

1 回答 1

1

您可以将其视为一个普通的 javascript function,它可以返回一个值或不返回一个值,并且您可以使用或不使用该返回函数。你不需要那个clickAll变量。

await page.$$eval('button', links => links.forEach(link => link.click()));
于 2020-06-26T18:29:05.067 回答