asyn c для l oop с кукловодом - PullRequest
0 голосов
/ 01 марта 2020

Я пытаюсь автоматизировать браузер, используя puppeteer. js, и я нажимаю div в длинном списке div, которые находятся в модальном режиме и прокручиваются. Я oop, через которые я хочу кликнуть на 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)});
});

Как сделать так, чтобы l oop замедлялся, чтобы он ожидал события щелчка, прежде чем двигаться дальше?

1 Ответ

0 голосов
/ 01 марта 2020

Метод click возвращает обещание, поэтому внутри ForEach он не будет работать. вам нужно использовать for..of l oop вот так

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);
  }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...