首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >async for loop with puppeteer

async for loop with puppeteer
EN

Stack Overflow用户
提问于 2020-03-01 23:38:43
回答 1查看 91关注 0票数 0

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

此示例有效:

代码语言:javascript
复制
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)});

但是很明显,如果我想点击不同的元素,我不能硬编码它们。我试过这样做,但是滚动和点击元素的速度太快了。

代码语言:javascript
复制
_.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)});
});

我怎么才能让这个循环慢下来,让它在继续之前等待click事件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-02 00:05:55

THe单击方法返回一个promise,因此在ForEach中它将无法工作。您需要像这样使用for..of循环

代码语言:javascript
复制
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);
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60476770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档