Перебор массива с фунциями
Приветствую всех!
Есть некий массив: let zaprosi = ["Запрос1", "Запрос2", "Запрос3"] Ввод в поисковую строку + клик по кнопке: document.querySelector('input#search').value ='ЗАПРОСЫ ИЗ МАССИВА ПО ОЧЕРЕДИ'; document.querySelector('button#search-icon-legacy').click(); Также есть код [Код001] (ищет по тексту совпадения - кликает, если не нашел - прокручивает страницу и снова ищет): 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) Собственно, мне нужно всё это соединить, что последовательность была такая:
|
Что то вроде такого можно изобразить.
Но правильность не могу гарантировать, т.к не знаю, что по кликам происходит 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); } } } // IIFE тут нужна только, что бы использовать await в этом коде ;(async function () { for (const zap of zaprosi) { document.querySelector('input#search').value = zap; document.querySelector('button#search-icon-legacy').click(); await findAndClick('Не понял, что тут должно быть', 3000) } })() |
voraa,
Протестировал ваш скрипт. Пытался что-то вроде этого изобразить (не так грамотно, но суть одна) Результат один - он вводит запрос1 - кликает кнопку, и всё, ступор, скролла и поиска не идет. Тестировал скролл страницы и поиск без массива - всё работает. Не пойму в чем проблема... Цитата:
В двух словах -заходим на Ютуб, скрипт вводит запрос 1, ищет видео с определенного канала и кликает по картинке по нему, если такого канала не нашел - скроллит до победного, пока не найдет, далее вводит запрос2 и всё по кругу пошло. UPDATE: иногда он сразу начинает скроллить и вводить запрос1, после кликает и ступорится. Помогите разобраться, пожалуйста:( |
Я же не знаю,что там по кликам происходит. Там могут быть какие то асинхронные запросы к серверу, и надо ждать, пока они отработают.
Ну в отладчике смотреть, что там происходит. |
Цитата:
|
Часовой пояс GMT +3, время: 20:39. |