Тема: JS: Цикл с переменными и массив
Доброго времени суток.
По совету, начал переписывать определенный участок кода с ahk, полностью на JS, ибо, возможно кривая работа кода связана именно с этим.
Возникли проблемы (как обычно ).
Собственно, суть скрипта (ЮТУБ):
отправил "запрос 1" в строку поиска
нажал на кнопку поиска
идет поиск на странице по названию канала
клик по картинке видоса
если не нашел канал - скролл (до победного)
далее уже идет запрос 2 и всё пошло по кругу
Красиво всё расписано, но работает через жопу
Отдельно всё протестировано - и вводит запрос, и ищет и скроллит (если нужно).
Как только пытаюсь соединить всё в 1 скрипт - начинаются проблемы.
В данном ниже примере, проблема в том, что после ввода "запрос1" скрипт ступорится и ничего не делает.
Также иногда он начинает скроллить - даже не введя запрос, и на этом также - финиш.
Прошу помощи...
let zaprosi = ["Запрос1", "Запрос2", "Запрос3"]
const delay = (t) =>new Promise (res => setTimeout (res, t));
const findAndClick = async (channelName, td) => {
while (true) {
const blocks = Array.from(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();
return;
} else {
window.scrollBy(0, 5500);
await delay (td);
}
}
}
;(async function () {
for (const zap of zaprosi) {
document.querySelector('input#search').value = zap;
document.querySelector('button#search-icon-legacy').click();
await findAndClick('Название канала', 3000)
}
})()
Оригинальные (не изнасилованные мною) части кода:
Ввод запроса и клик:
document.querySelector('input#search').value ='ЗАПРОСЫ ИЗ МАССИВА ПО ОЧЕРЕДИ';
document.querySelector('button#search-icon-legacy').click();
Поиск канала и клик по нужному видосу вариант 1:
const findAndClick = (channelName, delay) => {
const blocks = Array.from(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)
Поиск канала и клик по нужному видосу вариант 2:
((channelName) => {
function searchCannel(channelName) {
const coll = document.querySelectorAll('div#channel-info');
let elem = '';
for (let item of coll) {
if ( item.innerText == channelName && (elem = item) )
break;
};
return elem;
}
let channel = '', allElemsCount = 0, counter = 0;
let timerId = setInterval(() => {
if ( (channel = searchCannel(channelName)) || counter == 5 ) {
clearInterval(timerId);
if (channel)
channel.parentNode.parentNode.querySelector('a#thumbnail').click();
else
alert('Not found!');
}
else {
let newAllElemsCount = document.querySelectorAll('a#thumbnail').length;
if (!(newAllElemsCount > allElemsCount))
counter++;
else {
allElemsCount = newAllElemsCount;
window.scrollTo(0, document.querySelector('ytd-app').scrollHeight);
}
}
}, 2000);
})('НАЗВАНИЕ КАНАЛА');
)
Ну, массив с запросами, понятно:
let zaprosi = ["Запрос1", "Запрос2", "Запрос3"]