Опытный бэкэнд-программист, JavaScript noob.
Как мне написать это в JS и заставить его работать.
Цель: автоматизация утомительной задачи резервного копирования информации из site:
1) Щелкните элемент в [alerts]
2) Дождитесь загрузки данных. Обнаружение данных готово, когда появляется кнопка [сохранить]. (1-2 с)
3) Нажмите [множественный выбор], чтобы выбрать все экземпляры для оповещения.
4) Нажмите кнопку [сохранить]
5) Go, чтобы перейти к шагу 1 для следующего предупреждения в [оповещениях]
В синхронном коде псевдо это будет :
alerts [array]
for i in alerts
click alerts[i].load
check if data ready; ready when save button appears
click select_all
click save
Вещи, которые я пробовал:
A) Для l oop, но он слишком быстро пробегал через l oop, не ожидая мутированных элементов.
var alerts = $('.alerts');
var imax = alerts.length;
for (var i=0; i<imax; i++) {
alerts[i].click();
var done = false;
while (!done) {
var el = $('#save');
if (el.length) {
$('.ui-select-all').click();
el.click();
done = true;
}
else {
setTimeout('', 500); // try again in 500 milliseconds
}
}
}
B) Пока l oop
var alerts = $('.alerts');
var imax = alerts.length;
var i = 0;
var done = false;
while (i < imax ) {
if (!done) {
alerts[i].click();
done = true;
}
var el = $('#save');
if (el.length) {
done = false;
i = i+1;
$('.ui-select-all').click();
$('#save');
}
}
Примечание: jquery
используется для краткости. Для Vanilla JS замените document.getElementById()
и document.getElementsByClassName()
при необходимости
Это блокирует браузер с момента его вращения
Попробовал setTimeout, но это был адский джанк-вызов.
Пауза 1-2 с на шаге №2 будет достаточной, после завершения №4, начните снова с № 1.
Однако, это идет вразрез с функциональностью JS asyn c, поэтому я не ясно видя, как это сделать.