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.click
或 page.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()));
如果 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.click
或 page.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()));