Задать вопрос
@Caitiff_One
Обычный человек, начинающий разработчик:)

Как кликнуть по кнопкам используя Javascript если после первого клика страница изменяется?

Привет всем, я новичок в вебе и у меня возникла одна трудность.
Есть скрипт вида:

for (i=0; i<10; i++) {
document.getElementById('ДивВКоторомПерваяКнопка').getElementsByClassName('КлассПервойКнопки')[0].click();
document.getElementById('ДивВКоторомВтораяКнопка').getElementsByClassName('КлассВторойКнопки')[0].click();
}

Но проблема в том, что если я через консоль (F12) запускаю эти строки по очереди - всё ок, но если я пытаюсь сделать это единым циклом и сразу его запустить - всплывает то, что вторая кнопка появляется только после нажатия первой, соответственно, как я понимаю, при запуске скрипта он не может увидеть вторую, появившуюся кнопку и падает с ошибкой " Uncaught TypeError: Cannot read property 'click' of undefined"

Подскажите, как сделать?
  • Вопрос задан
  • 723 просмотра
Подписаться 1 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
@dtestyk
самый простой способ: подождать некоторое время после первого нажатия, как то так:
function click_me(sel){
  document.querySelector(sel).click()
}
function loop(i){
  click_me('#ДивВКоторомПерваяКнопка > .КлассПервойКнопки')
  setTimeout(function(i){
    click_me('#ДивВКоторомВтораяКнопка > .КлассВторойКнопки')
    if(i) setTimeout(loop.bind(null, i-1), 500)
  }.bind(null, i), 500)
}
loop(10)
Ответ написан
@swcalc
Попробуйте покрутить такую конструкцию.
Можно еще повесить на появляющуюся кнопку onload="function_click();".
for (i=0; i<10; i++) {
    var clicked=0;
    document.getElementById('ДивВКоторомПерваяКнопка').getElementsByClassName('КлассПервойКнопки')[0].click();
    for (!clicked) {
        if (document.getElementById('ДивВКоторомВтораяКнопка').getElementsByClassName('КлассВторойКнопки')[0].length) {
               document.getElementById('ДивВКоторомВтораяКнопка').getElementsByClassName('КлассВторойКнопки')[0].click(); 
                clicked=1;
        }
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы