【问题标题】:Puppeteer: performing element.click() inside page.$evalPuppeteer:在 page.$eval 内执行 element.click()
【发布时间】:2020-10-16 00:46:13
【问题描述】:

page.$evalpage.$$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.clickpage.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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 2019-03-06
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    相关资源
    最近更新 更多