Дождаться загрузки данных после клика по ссылке
Добрый день.
Есть код (запускается в консоле браузера) 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(); |
Цитата:
Попробовал ваш вариант. Ошибка исчезла, но почему-то код перестаёт работать после первого обработанного элемента: Код:
0 1) откуда берётся undefined (отображается даже при отсутствии вывода чего-либо в консоль) 2) почему переменная i при повторном выводе в консоль отображается как "content" |
Цитата:
undefined может отображаться, как возвращаемое значение при вызове функции f(); Цитата:
Попробуйте инкапсулировать весь ваш код поместив его в блок {}, а все переменные задать через let. |
Цитата:
Благодарю! |
Часовой пояс GMT +3, время: 09:51. |