Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Нажать на кнопки после полной загрузки страницы (https://javascript.ru/forum/events/83832-nazhat-na-knopki-posle-polnojj-zagruzki-stranicy.html)

firsmember 29.03.2022 11:47

Нажать на кнопки после полной загрузки страницы
 
Добрейшего денечка Господа.

На сайте есть несколько кнопок (количество может быть любым)
<input type="button" class="ays_next start_button action-button" value="Начать">
нужно после полной загрузки страницы нажать по 1 разу на эти кнопки.. Важно На сайте есть точно такие же кнопки (с такими же атрибутами и классами) но с другим текстом - Важно нажать на все кнопки именно с class="ays_next start_button action-button" и value="Начать"

Заранее премного вам благодарен.

voraa 29.03.2022 14:09

window.onload = () => {
   document.querySelectorAll('input.ays_next.start_button.action-button[value="Начать"]')
      .forEach(b => b.click());
}

firsmember 30.03.2022 07:38

Цитата:

Сообщение от voraa (Сообщение 544412)
window.onload = () => {
   document.querySelectorAll('input.ays_next.start_button.action-button[value="Начать"]')
      .forEach(b => b.click());
}

Подскажите еще пожалуйста, как сделать задержку в 3 секунды после полной загрузки страницы, а то есть ощущение, что некоторые скрипты которые мне нужны выполняются после того, как мы кликнули по кнопкам.

Или может можно выполнить его исключительно после того, как все скрипты на странице отработали уже?

рони 30.03.2022 08:05

Цитата:

Сообщение от firsmember
как сделать задержку в 3 секунды

Планирование: setTimeout и setInterval

firsmember 30.03.2022 08:09

как то странно работает очень...

Если пишу
window.onload = () => {
	   document.querySelectorAll('input.ays_next.start_button.action-button[value="Начать"]')
		  .forEach(b => b.click());
	}


То по человечески срабатывает только клик по первой кнопке, а еси пишу

window.onload = () => {
	   document.querySelectorAll('input.ays_next.start_button.action-button[value="Начать"]')
		  .forEach(b => b.click());
	}
	window.onload = () => {
	   document.querySelectorAll('.calck_quiz_nav input.ays_next.start_button.action-button[value="Начать"]')
		  .forEach(c => c.click());
	}


т.е. вторым скриптом указываю на вторую кнопку, то он выполняет только клик по 2й кнопке... :(

voraa 30.03.2022 08:47

А что должно происходить при кликах по кнопкам ?

Цитата:

Сообщение от firsmember
т.е. вторым скриптом указываю на вторую кнопку, то он выполняет только клик по 2й кнопке...

Естественно. Вы же вторым window.onload переопределяете первый.

firsmember 30.03.2022 10:02

Цитата:

Сообщение от voraa (Сообщение 544428)
А что должно происходить при кликах по кнопкам ?

У меня плагин квиза, и перед его запуском стоит кнопка начать, так вот разработчики плагина уверяют что эта кнопка обязательна и без нее никак, по этому мой единственный выход пройтись по странице и нажать на все эти кнопки, чтобы пользователь сразу видел квиз, а не кнопку...

Цитата:

Сообщение от voraa (Сообщение 544428)
Естественно. Вы же вторым window.onload переопределяете первый.

Как тогда нужно сделать?

рони 30.03.2022 10:07

Цитата:

Сообщение от firsmember
Как тогда нужно сделать?

по ссылке описание вашей ошибки, и её решение
addEventListener

voraa 30.03.2022 10:12

Цитата:

Сообщение от firsmember
по этому мой единственный выход пройтись по странице и нажать на все эти кнопки, чтобы пользователь сразу видел квиз, а не кнопку...

Я не спрашивал зачем это надо, а что должно происходить при нажатии. Меняется ли как нибудь DOM при нажатии и как?
Цитата:

Сообщение от firsmember
То по человечески срабатывает только клик по первой кнопке,

А что значит, что не срабатывают другие? Или срабатывают но не по человечески?
Функция click() - синхронная. Пока полностью не отработает обработчик события дальше не пойдет. Т.е пока полностью не отработает обработчик нажатия первой кнопки, не будет выполняться click() для второй и следующих.
Что происходит в этих обработчиках - надо разбираться с библиотекой.

firsmember 30.03.2022 10:24

Цитата:

Сообщение от voraa (Сообщение 544431)
Я не спрашивал зачем это надо, а что должно происходить при нажатии. Меняется ли как нибудь DOM при нажатии и как?

Ну конечно, выполняется скрипт, скрывается эта кнопка и показывается киз.

Цитата:

Сообщение от voraa (Сообщение 544431)
А что значит, что не срабатывают другие? Или срабатывают но не по человечески?
Функция click() - синхронная. Пока полностью не отработает обработчик события дальше не пойдет. Т.е пока полностью не отработает обработчик нажатия первой кнопки, не будет выполняться click() для второй и следующих.
Что происходит в этих обработчиках - надо разбираться с библиотекой.

Это значит, что по отдельности они срабатывают, а все вместе нет.


Причем в плагине есть возможность включить автозапуск квиза, но там как раз есть пометка, что он будет работать только в том случае, если квиз всего 1 на странице.

Вот хотелось бы обойти все это..

voraa 30.03.2022 10:40

Цитата:

Сообщение от firsmember
а все вместе нет.

Как бы Вы поняли фразу "телевизор не работает"?
Вообще не включается?
Включается, но нет изображения (черный экран)?
Экран светится, но картинки нет (рябь на экране)?
Картинка есть, но нет звука?
.....
.....

Здесь тоже самое.
Что именно происходит?
Сообщения об ошибках?
До второго клика дело вообще не доходит?
Второй (и последующие) клики проходят, но DOM на этих кнопках не меняется?
DOM меняется, но неправильно?
......
......

firsmember 30.03.2022 10:48

Цитата:

Сообщение от voraa (Сообщение 544433)
Что именно происходит?
Сообщения об ошибках?
До второго клика дело вообще не доходит?
Второй (и последующие) клики проходят, но DOM на этих кнопках не меняется?
DOM меняется, но неправильно?

Сообщений об ошибках нет,
Первый клик проходит как положено - все супер, 2й и последующий клик будто не проходят но там есть возможность в каждом квизе включить прогресс бар который имеет абсолютное позиционирование и просто скрыт до появления квиза (до нажатия кнопки), так вот включив его, я понял что клики проходят, так как появляется этот прогрессбар, но вот кнопка не исчезает и квиз не появляется - получается, что все клики кроме первого проходят но DOM меняется неправильно...

voraa 30.03.2022 11:09

Может быть плагин не позволяет одновременно обрабатывать несколько кликов. Можно попробовать (проверить это), выполняя клики не сразу, а с временной задержкой, скажем в 3 сек.

window.onload = () => {
	bts = document.querySelectorAll('input.ays_next.start_button.action-button[value="Начать"]')
	let i=0, n = bts.length;
	const bclick = () => {
		bts[i++].click();
		if (i<n) setTimeout(bclick, 3000);
	}
	bclick();
}

firsmember 30.03.2022 11:22

Цитата:

Сообщение от voraa (Сообщение 544435)
Может быть плагин не позволяет одновременно обрабатывать несколько кликов. Можно попробовать (проверить это), выполняя клики не сразу, а с временной задержкой, скажем в 3 сек.

Да, я так и подумал, когда написал вам 2е свое сообщение в этом топике, когда спросил про задержку)))

Круто, кровью и потом именно этот способ сработал! Спасибо большое!! :dance:

voraa 30.03.2022 11:26

Тут дело не в задержке после загрузки страницы, а именно в задержке между кликами. Вероятно плагин запускает какие то асинхронные операции, и написан так, что не может правильно выполнить следующую, пока не закончилась предыдущая.

firsmember 30.03.2022 11:41

Понял, благодарю! В любом случае, вышло простое и отличное решение..


Часовой пояс GMT +3, время: 18:20.