我需要有关 Javascript Promises 的帮助。
-buttons
是一个节点列表。我从puppeteer
(API)得到它。
我需要一个带有特定文本的按钮列表。
我转换buttons
为真实按钮数组(page.evaluate API 链接):
我通过数组映射,
将其转换为按钮,
检查文本,return null
如果文本不是我需要的
我console.log
是按钮文本 - 它向我显示了我需要的文本 - 所以一切都很好。
然后我增加counter
并返回转换后的按钮。
之后我过滤数组 - 检查非空元素。我希望goodButtons
它只包含我需要的按钮 - 带有正确的文本。
但输出是
buttons 328
button: Confirm
button: Confirm
... 100 lines of "good button text" in total
button: Confirm
counter 0
good buttons 328
所以计数器不会增加一次(或者async/await东西有一个技巧console.log,我错过了?)
但似乎goodButtons数组包含所有按钮,尽管我在控制台中登录的按钮文本似乎是正确的。
编码
const buttons = await page.$$('button[type="button"]')
console.log('buttons', await buttons.length)
let counter = 0;
let goodButtons = await buttons.map(async button => {
const btnText = await page.evaluate(btn => btn.innerText, button);
if (!['Confirm'].includes(btnText)) return null
counter++
console.log('button: ', btnText)
return await button
}).filter(button => button !== null)
console.log('counter', counter)
console.log('good buttons', await goodButtons.length)
UPD(在 Felix Kling 评论之后)
let counter = 0;
let goodButtons = buttons.map(async button => {
const btnText = await page.evaluate(btn => btn.innerText, button);
if (!['Confirm', 'Подтвердить'].includes(btnText)) return null
counter++
return await button
})
goodButtons = await Promise.all(goodButtons)
goodButtons = goodButtons.filter(button => button !== null)
输出
buttons 328
counter 149
good buttons 328
繁星点点滴滴
慕虎7371278
相关分类