Дождаться загрузки данных после клика по ссылке
Добрый день.
Есть код (запускается в консоле браузера)
var itemСount = 5
var i=0
f=function(){
document.getElementsByClassName('b-link js-show-item')[i].click()
var trackId = document.getElementsByClassName('b-form__text b-form__text_state_item-value b-tracking')[0].outerText
console.log(trackId)
//и ещё много кода
i=i+1
if (i<itemСount) {
setTimeout(f, "1000")
}
}
f();
Он перебирает нужные элементы и кликает по ним. При клике на сайте открывается попап, из которого забирается нужная информация. И так, пока не будет выполнено условие. Суть проблемы в том, что при первом запуске в консоле ошибка: Код:
Cannot read properties of undefined (reading 'outerText')Но не пойму как сделать так, чтобы после клика дождаться появления попапа с данными. Попробовал добавить setInterval, но либо не так сделал, либо он не помогает:
var itemСount = 5
var i=0
f=function(){
console.log(i)
document.getElementsByClassName('b-link js-show-item')[i].click()
console.log('click')
let k = setInterval(function() {
console.log(i + '<---in setInterval')
if (document.getElementsByClassName('b-form__text b-form__text_state_item-value b-tracking')[0]){
var trackId = document.getElementsByClassName('b-form__text b-form__text_state_item-value b-tracking')[0].outerText
console.log(trackId)
clearInterval(k);
console.log("element found")
} else {
console.log('another try')
}
}, 1000);
i=i+1
if (i<itemСount) {
console.log(i)
setTimeout(f, "1000")
}
}
f();
При первом запуске получаю следующее: Код:
0В общем, что-то никак у меня не выходит решить проблему. Прошу помощи. |
Вопрос, можно ли кликать по следующей ссылке, пока есть попап окно от предыдущей?
Может надо запускать повторно f() не просто через 1 сек, а только тогда, когда уже обработано предыдущее окно. Что то типа такого
var itemСount = 5
var i=0
f=function(){
console.log(i)
document.getElementsByClassName('b-link js-show-item')[i].click()
console.log('click')
let k = setInterval(function() {
console.log(i + '<---in setInterval')
if (document.getElementsByClassName('b-form__text b-form__text_state_item-value b-tracking')[0]){
var trackId = document.getElementsByClassName('b-form__text b-form__text_state_item-value b-tracking')[0].outerText
console.log(trackId)
clearInterval(k);
console.log("element found");
i=i+1
if (i<itemСount) {
console.log(i)
setTimeout(f, 100)
}
} else {
console.log('another try')
}
}, 1000);
}
f();
|
Цитата:
Попробовал ваш вариант. Ошибка исчезла, но почему-то код перестаёт работать после первого обработанного элемента: Код:
01) откуда берётся undefined (отображается даже при отсутствии вывода чего-либо в консоль) 2) почему переменная i при повторном выводе в консоль отображается как "content" |
Цитата:
undefined может отображаться, как возвращаемое значение при вызове функции f(); Цитата:
Попробуйте инкапсулировать весь ваш код поместив его в блок {}, а все переменные задать через let. |
Цитата:
Благодарю! |
| Часовой пояс GMT +3, время: 15:56. |