JS Цикл, пока не выполнится условие
Данный ниже код ищет на поисковой странице (запрос ввожу я сам) Ютуба видео по названию канала, затем кликает по нему. Мне необходимо добавить в код window.scrollBy(0,5500);, [это скролл страницы], так, чтобы он выполнялся бесконечно, пока не будет найдено нужное видео с канала - затем уже кликнуть по нему, у меня за клик сейчас отвечает строка elem.parentNode.parentNode.querySelector('a#thumbnail').click();
(() => {
const coll = document.querySelectorAll('div#channel-info');
let elem;
for (let item of coll) {
if ( item.innerText == 'НАЗВАНИЕ КАНАЛА' && (elem = item) )
break;
};
if (elem)
elem.parentNode.parentNode.querySelector('a#thumbnail').click();
else
alert('Не найдено!');
})();
Пробовал вот так (но тут ограниченное кол-во скроллов + по видосу он в итоге не кликает):
(() => {
const coll = document.querySelectorAll('div#channel-info');
let elem;
for (let item of coll) {
if ( item.innerText == 'НАЗВАНИЕ_КАНАЛА' && (elem = item) )
break;
};
if (elem)
elem.parentNode.parentNode.querySelector('a#thumbnail').click();
else
for (let i=1; i<15; i++) {
setTimeout( function timer(){
window.scrollBy(0,5500);
}, i*1200 );
}
})();
Буду благодарен за помощь!
Ответы (1 шт):
Автор решения: Daniil Dubchenko
→ Ссылка
Весь код помещаем в функцию и работаем по следующему алгоритму:
- Ищем кнопку
-
- Нашли - нажимаем
- Нет - мотаем страницу вниз и запускаем функцию с небольшой задержкой
- Возвращаемся к пункту 1
const findAndClick = (channelName, delay) => {
const blocks = document.querySelectorAll('div#channel-info');
let elem = blocks.find((item) => item.innerText.trim().toLowerCase() == channelName.toLowerCase())
if (elem) {
elem.parentNode.parentNode.querySelector('a#thumbnail').click();
} else {
window.scrollBy(0,5500)
setTimeout(() => {
findAndClick(channelName, delay)
}, delay)
}
}
findAndClick('Название канала', 3000)