Автоматический щелчок элементов списка периодически по Javascript - PullRequest
1 голос
/ 19 апреля 2020

У меня есть страница, на которой есть список, где мне нужно автоматически нажимать на все элементы поочередно и периодически. Также у меня есть кнопка, которую нужно нажимать после нажатия на каждый элемент. И, в конце концов, это повторится, когда он завершит sh щелчком всех элементов. Я написал Javascript код, и он работает, что я хотел. Но проблема в том, что это очень длинный код, поскольку в списке около 170 элементов. Пример кода только для 7 элементов приведен ниже:

setInterval(function(){ 

var btn = document.getElementById("ember331");

var span_0 = document.getElementsByClassName("ember-view")[0];
setTimeout(function(){
span_0.scrollIntoView();
document.getElementById("ember104").scrollIntoView();
span_0.click(); }, 5000);

setTimeout(function(){
btn.click(); }, 8000);

var span_1 = document.getElementsByClassName("ember-view")[1];
setTimeout(function(){
span_1.click(); }, 13000);

setTimeout(function(){
btn.click(); }, 16000);

var span_2 = document.getElementsByClassName("ember-view")[2];
setTimeout(function(){
span_2.click(); }, 21000);

setTimeout(function(){
btn.click(); }, 24000);

var span_3 = document.getElementsByClassName("ember-view")[3];
setTimeout(function(){
span_3.click(); }, 290000);

setTimeout(function(){
btn.click(); }, 32000);

var span_4 = document.getElementsByClassName("ember-view")[4];
setTimeout(function(){
span_4.click(); }, 37000);

setTimeout(function(){
btn.click(); }, 40000);

var span_5 = document.getElementsByClassName("ember-view")[5];
setTimeout(function(){
span_5.click(); }, 450000);

setTimeout(function(){
btn.click(); }, 48000);

var span_6 = document.getElementsByClassName("ember-view")[6];
setTimeout(function(){
span_6.click(); }, 450000);

setTimeout(function(){
btn.click(); }, 48000);


 }, 53000);

Вы уже можете заметить, что он такой длинный только для 7 элементов.

Итак, возможно ли напишите это короткими и альтернативными способами ??

1 Ответ

0 голосов
/ 19 апреля 2020

Попробуйте вместо этого использовать функцию async. Всякий раз, когда вам нужно отложить, await Обещание, которое разрешается через желаемое количество миллисекунд. Затем вы можете просто l oop над .ember-view s и await при необходимости, прежде чем нажать:

const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
const btn = document.getElementById("ember331");
// use a recursive setTimeout, not setInterval,
// so you don't have to hard-code the interval time
setTimeout(async function timeoutCallback() {
  await delay(2000);
  for (const emberView of document.querySelectorAll('.ember-view')) {
    await delay(3000);
    emberView.scrollIntoView();
    emberView.click();
    await delay(3000);
    btn.click();
  }
  setTimeout(timeoutCallback, 5000);
});
...