Puppeteer语言 - 试图点击多个按钮,但它只点击几个和随机



我有一个木偶脚本,登录到一个网站,然后正在寻找点击7个不同的'添加时间';按钮在iFrame内。由于id是动态变化的,所以我让它查找按钮的文本。

我有它登录正确,能够点击有时,但它不点击所有的按钮。它也不一致,最后两个按钮可能被点击或第二个按钮。

代码如下:

let test = await frame.$$('[type="button"]')
test.forEach(async el => {
var text = await (await el.getProperty('textContent')).jsonValue()
if (text == "Add Time") {
await el.click();
}
});

如注释中所述,以下模式同时运行所有单击:

test.forEach(async el => {...});

大多数网站通常不会设计成7个不同的点击应该几乎同时发生——这是不人道的。通常,在用户再次点击之前,会有一些加载动画或暂停。

上述模式的另一个问题是,在此之后的任何代码都将处于不同的承诺链中,并且无法等待这些点击的结果。你必须使用await Promise.all([test.map(async el => {...})])才能做到这一点。

正如OP在评论中确认的那样,典型的解决方案是顺序迭代:

for (const el of test) {
...
}

这完全运行每个点击完成,然后下一个只有在最后一个完成后。for循环后的代码将在循环的所有迭代完成后执行。

参见在一个循环中使用Puppeteer抓取多个url和在forEach循环中使用async/await。

相关内容

  • 没有找到相关文章

最新更新