#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 на большее число, чтобы избежать регулирования.