Цикл For не работает должным образом для метода click()

#javascript #html #loops

#javascript #HTML #циклы

Вопрос:

Мне нужно эмулировать несколько нажатий кнопок на веб-сайте, и я хочу использовать цикл for, чтобы сделать это, но это работает не так, как ожидалось (он щелкает только один раз).

 for (i=0; i<10; i  ) {
  document.getElementById("increase_your_bet_button").click();
}
  

ОБНОВЛЕНИЕ: я перепробовал все предложенные решения, но ничего не сработало, и он запускался только один раз. Играл с setTimeout и в итоге нашел разумное решение:

 for (let i=0; i<10; i  ) {
setTimeout(function() {
document.getElementById("increase_your_bet_button").click();
}, 1000*(i 1));
}
  

Комментарии:

1. Это странно, это потому, что вам нужно добавить задержку в цикл? Я совсем не эксперт, но может случиться так, что веб-сайт не может регистрировать клики достаточно быстро.

2. Может регулироваться, если событие происходит программно. Есть isTrusted свойство, которое они могут проверить. И мы не знаем, что страница делает с этим щелчком

3. Вероятно, у них есть код, предотвращающий злоупотребление им… невозможно узнать, не посмотрев на их источник. Единственное, что вы можете сделать, это поиграть с использованием тайм-аутов и найти максимальную скорость, которую вы можете вызвать.

4. Привет! Можете ли вы добавить больше кода с веб-сайта? В частности, все, что может регулировать или блокировать ваш код? В качестве теста на регулирование вы можете добавить setTimeout в свой цикл.

Ответ №1:

Работает отлично:

 for (i = 0; i < 10; i  ) {
  document.getElementById("increase_your_bet_button").click();
}  
 .as-console-wrapper { max-height: 100% !important; top: auto; }  
 <button id="increase_your_bet_button" onclick="console.log('Click!')">Click!</button>  

Комментарии:

1. Проблема в том…. вы не знаете, что делает код, поэтому, да, он работает нормально, но что-то в черном ящике мешает этому …. так что это на самом деле не ответ, скорее комментарий.

2. Итак, должен ли я объяснить, что делает код и возможную причину, по которой он сломал @epascarello?

Ответ №2:

У меня это сработало.

 const btn = document.getElementById('increase_your_bet_button');

btn.addEventListener('click', () => console.log('clicker'));

for (let i = 0; i < 10; i  ) {
  btn.click();
}  
 <button id="increase_your_bet_button">Increase your bet</button>  

Чтобы решить эту проблему, попробуйте использовать асинхронный цикл, такой как:

 const btn = document.getElementById('increase_your_bet_button');

btn.addEventListener('click', () => console.log('clicker'));

let i = 0;

// Click every millisecond.
function clickTenTimes() {
  btn.click();

  i  ;
  if (i < 10)
    setTimeout(clickTenTimes, 1);
}

clickTenTimes();  
 <button id="increase_your_bet_button">Increase your bet</button>  

Комментарии:

1. Цикл по-прежнему будет тем же самым, вы просто смещаете его на миллисекунду. Вероятно, придется изменить 1 на большее число, чтобы избежать регулирования.