使用puppeteer进行异步循环



我正在尝试使用puppeteer.js自动化浏览器,我正在点击一长串模式和滚动的div中的一个div。我循环浏览我想点击的div,并按顺序点击它们。似乎如果我给浏览器足够的时间,它会滚动到正确的位置,然后点击div.

此示例有效:

users_names[14].click().catch(function(error){console.log("some error ", "position", error)});
await delay(2000);
users_names[45].click().catch(function(error){console.log("some error ", "position", error)});
await delay(2000);
users_names[54].click().catch(function(error){console.log("some error ", "position", error)});
await delay(2000);
users_names[0].click().catch(function(error){console.log("some error ", "position", error)});
await delay(2000);
users_names[29].click().catch(function(error){console.log("some error ", "position", error)});

但很明显,如果我想点击不同的元素,我不能对它们进行硬编码。我试过这样做,但它过快,无法滚动和点击元素。

_.forEach(namesToSend, function(n) {
var position = memberOrder.indexOf(n)
console.log('position: ', position)
if(position != -1)
users_names[position].click().catch(function(error){console.log("some error ", position, error)});
});

我如何使这个循环变慢,以便它在继续之前等待点击事件?

单击方法返回一个promise,因此在ForEach中它不起作用。你需要像这个一样使用for..of循环

for (const name of namesToSend) {
try {
var position = memberOrder.indexOf(name);
if (position != -1) await users_names[position].click();
} catch (error) {
console.log("some error ", position, error);
}
}

最新更新