【发布时间】:2020-10-16 00:46:13
【问题描述】:
page.$eval 和 page.$$eval 方法都返回一个值,如果 pageFunction 本身返回一个 Promise (我想这是一个非常罕见的 puppeteer 的情况,如果他们不会,大多数 puppeteer 方法返回 Promise)。
page.$$eval(selector, 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.click 或page.type),尤其是如果出于非常相似的原因我们将其视为@ 987654323@ 当我们不使用返回的数组时?
我很好奇,因为这样我们可以简化使用Array.forEach is problematic 的场景。
它确实有效,但我们应该使用它吗?
const clickAll = await page.$$eval('button', links => links.forEach(link => link.click()));
注意: 将其设为 const 对我来说意义不大,因为我们不能在其他任何地方使用 clickAll 引用。我宁愿自己使用它而不声明它。
【问题讨论】:
-
你可以说 $$eval 可以返回一个值,但它不需要。
-
谢谢@hardkoded!同时我也喜欢这个解决方案:) 所以单独使用它(不将其声明为
const)应该没问题,没有预期的副作用? -
没有副作用,你不需要
clickAll -
您能否将其作为独立答案发布在下面?谢谢你:)
标签: javascript puppeteer browser-automation playwright