Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.02.2021, 04:40
Новичок на форуме
Отправить личное сообщение для MichaelYT Посмотреть профиль Найти все сообщения от MichaelYT
 
Регистрация: 23.01.2021
Сообщений: 7

Перебор массива с фунциями
Приветствую всех!

Есть некий массив:
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)


Собственно, мне нужно всё это соединить, что последовательность была такая:
  • Взял значение "Запрос1" из переменной zaprosi
  • Вставил в document.querySelector('input#search').value='ЗН АЧЕНИЕ';
  • Кликнул по кнопке document.querySelector('button#search-icon-legacy').click();
  • Выполнил "Код001"
  • Далее взял значение "Запрос2" из переменной zaprosi и по кругу... Потом также "Запрос3".
Буду благодарен за помощь и советы!
Ответить с цитированием
  #2 (permalink)  
Старый 01.02.2021, 11:11
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Что то вроде такого можно изобразить.
Но правильность не могу гарантировать, т.к не знаю, что по кликам происходит
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, 01.02.2021 в 11:29.
Ответить с цитированием
  #3 (permalink)  
Старый 01.02.2021, 12:59
Новичок на форуме
Отправить личное сообщение для MichaelYT Посмотреть профиль Найти все сообщения от MichaelYT
 
Регистрация: 23.01.2021
Сообщений: 7

voraa,
Протестировал ваш скрипт. Пытался что-то вроде этого изобразить (не так грамотно, но суть одна)
Результат один - он вводит запрос1 - кликает кнопку, и всё, ступор, скролла и поиска не идет.
Тестировал скролл страницы и поиск без массива - всё работает. Не пойму в чем проблема...

Сообщение от voraa
Не понял, что тут должно быть
Извиняюсь, что не полностью объяснил суть скрипта.
В двух словах -заходим на Ютуб, скрипт вводит запрос 1, ищет видео с определенного канала и кликает по картинке по нему, если такого канала не нашел - скроллит до победного, пока не найдет, далее вводит запрос2 и всё по кругу пошло.

UPDATE: иногда он сразу начинает скроллить и вводить запрос1, после кликает и ступорится.
Помогите разобраться, пожалуйста

Последний раз редактировалось MichaelYT, 01.02.2021 в 13:09.
Ответить с цитированием
  #4 (permalink)  
Старый 01.02.2021, 14:49
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Я же не знаю,что там по кликам происходит. Там могут быть какие то асинхронные запросы к серверу, и надо ждать, пока они отработают.
Ну в отладчике смотреть, что там происходит.
Ответить с цитированием
  #5 (permalink)  
Старый 01.02.2021, 17:33
Новичок на форуме
Отправить личное сообщение для MichaelYT Посмотреть профиль Найти все сообщения от MichaelYT
 
Регистрация: 23.01.2021
Сообщений: 7

Сообщение от voraa Посмотреть сообщение
Я же не знаю,что там по кликам происходит. Там могут быть какие то асинхронные запросы к серверу, и надо ждать, пока они отработают.
Ну в отладчике смотреть, что там происходит.
Попытался разобраться в отладчике - запутался еще больше. Не подскажите, как именно посмотреть что происходит в отладчике? Я тестирую через Хром, вставляю скрипт в консоль, указываю команду debugger в разных местах, но что-то не выходит.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Раздельный перебор массива Himmelin Общие вопросы Javascript 18 31.10.2020 19:28
Перебор элементов массива и сравнение со значением TheSanches Общие вопросы Javascript 7 26.02.2018 19:54
Перебор массива ureech Элементы интерфейса 3 10.02.2017 19:45
Перебор массива. ureech Элементы интерфейса 1 18.08.2016 09:53
Перебор массива - вложенный цикл SWin Общие вопросы Javascript 35 27.12.2013 05:06