<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; JS: Цикл с переменными и массив]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=16041</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=16041&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «JS: Цикл с переменными и массив».]]></description>
		<lastBuildDate>Fri, 05 Feb 2021 09:37:46 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: JS: Цикл с переменными и массив]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=145855#p145855</link>
			<description><![CDATA[<p><strong>svoboden</strong><br />Ну, всё что в моём первом посте из скриптов - это на JS. Про получение и обновление ключа я находил тему, но там для каждого ключа нужен отдельный аккаунт гугл, что в моем случае не сильно удобно.</p>]]></description>
			<author><![CDATA[null@example.com (Michael)]]></author>
			<pubDate>Fri, 05 Feb 2021 09:37:46 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=145855#p145855</guid>
		</item>
		<item>
			<title><![CDATA[Re: JS: Цикл с переменными и массив]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=145852#p145852</link>
			<description><![CDATA[<div class="quotebox"><cite>Michael пишет:</cite><blockquote><p>через Java.</p></blockquote></div><p>Через какое Java. А так на форуме уже давно были темы, как получать, и как обновлять токен (ключ).</p>]]></description>
			<author><![CDATA[null@example.com (svoboden)]]></author>
			<pubDate>Fri, 05 Feb 2021 06:34:58 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=145852#p145852</guid>
		</item>
		<item>
			<title><![CDATA[Re: JS: Цикл с переменными и массив]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=145850#p145850</link>
			<description><![CDATA[<p><strong>svoboden</strong><br />Основная проблема в необходимости получения ключа, что в моем случае крайне неудобно. Плюс ко всему документации на русском к API минимум, как и поддержки. Поэтому пытаюсь написать через Java.</p>]]></description>
			<author><![CDATA[null@example.com (Michael)]]></author>
			<pubDate>Fri, 05 Feb 2021 05:27:07 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=145850#p145850</guid>
		</item>
		<item>
			<title><![CDATA[Re: JS: Цикл с переменными и массив]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=145829#p145829</link>
			<description><![CDATA[<p>А через api ютуба не проще ли выполнить такую задачу <img src="//forum.script-coding.com/img/smilies/hmm.png" width="15" height="15" />.</p>]]></description>
			<author><![CDATA[null@example.com (svoboden)]]></author>
			<pubDate>Thu, 04 Feb 2021 01:52:59 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=145829#p145829</guid>
		</item>
		<item>
			<title><![CDATA[JS: Цикл с переменными и массив]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=145707#p145707</link>
			<description><![CDATA[<p>Доброго времени суток.<br />По совету, начал переписывать определенный участок кода с ahk, полностью на JS, ибо, возможно кривая работа кода связана именно с этим.<br />Возникли проблемы (как обычно <img src="//forum.script-coding.com/img/smilies/big_smile.png" width="15" height="15" />). <br />Собственно, суть скрипта (ЮТУБ): <br /></p><ul><li><p>отправил &quot;запрос 1&quot; в строку поиска</p></li><li><p>нажал на кнопку поиска</p></li><li><p>идет поиск на странице по названию канала</p></li><li><p>клик по картинке видоса</p></li><li><p>если не нашел канал - скролл (до победного)</p></li><li><p>далее уже идет запрос 2 и всё пошло по кругу</p></li></ul><p>Красиво всё расписано, но работает через жопу <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />Отдельно всё протестировано - и вводит запрос, и ищет и скроллит (если нужно).<br />Как только пытаюсь соединить всё в 1 скрипт - начинаются проблемы.<br />В данном ниже примере, проблема в том, что после ввода &quot;запрос1&quot; скрипт ступорится и ничего не делает.<br />Также иногда он начинает скроллить - даже не введя запрос, и на этом также - финиш.<br /><strong>Прошу помощи...</strong><br /></p><div class="codebox"><pre><code>let zaprosi = [&quot;Запрос1&quot;, &quot;Запрос2&quot;, &quot;Запрос3&quot;]


const delay = (t) =&gt;new Promise (res =&gt; setTimeout (res, t));

const findAndClick = async (channelName, td) =&gt; {
	while (true) {
		const blocks = Array.from(document.querySelectorAll(&#039;div#channel-info&#039;));
 
		let elem = blocks.find((item) =&gt; item.innerText.trim().toLowerCase() == channelName.toLowerCase())
 
		if (elem) {
			elem.parentNode.parentNode.querySelector(&#039;a#thumbnail&#039;).click();
			return;
		} else {
			window.scrollBy(0, 5500);
			await delay (td);
		}
	}
}
 
;(async function () {
	for (const zap of zaprosi) {
		document.querySelector(&#039;input#search&#039;).value = zap;
		document.querySelector(&#039;button#search-icon-legacy&#039;).click();
		await findAndClick(&#039;Название канала&#039;, 3000)
	}
})()</code></pre></div><p>Оригинальные (не изнасилованные мною) части кода:<br />Ввод запроса и клик:<br /></p><div class="codebox"><pre><code>document.querySelector(&#039;input#search&#039;).value =&#039;ЗАПРОСЫ ИЗ МАССИВА ПО ОЧЕРЕДИ&#039;;
document.querySelector(&#039;button#search-icon-legacy&#039;).click();</code></pre></div><p>Поиск канала и клик по нужному видосу <span class="bbu">вариант 1</span>:<br /></p><div class="codebox"><pre><code>const findAndClick = (channelName, delay) =&gt; {
  const blocks = Array.from(document.querySelectorAll(&#039;div#channel-info&#039;));

  let elem = blocks.find((item) =&gt; item.innerText.trim().toLowerCase() == channelName.toLowerCase())

  if (elem) {
    elem.parentNode.parentNode.querySelector(&#039;a#thumbnail&#039;).click();
  } else {
    window.scrollBy(0, 5500)

    setTimeout(() =&gt; {
      findAndClick(channelName, delay)
    }, delay)
  }
}

findAndClick(&#039;НАЗВАНИЕ КАНАЛА&#039;, 3000)</code></pre></div><p>Поиск канала и клик по нужному видосу <span class="bbu">вариант 2</span>:<br /></p><div class="codebox"><pre><code>((channelName) =&gt; {
   function searchCannel(channelName) {
      const coll = document.querySelectorAll(&#039;div#channel-info&#039;);
      let elem = &#039;&#039;;
      for (let item of coll) {
         if ( item.innerText == channelName &amp;&amp; (elem = item) )
            break;
      };
      return elem;
   }
   let channel = &#039;&#039;, allElemsCount = 0, counter = 0;
   let timerId = setInterval(() =&gt; {
      if ( (channel = searchCannel(channelName)) || counter == 5 ) {
         clearInterval(timerId);
         if (channel)
            channel.parentNode.parentNode.querySelector(&#039;a#thumbnail&#039;).click();
         else
            alert(&#039;Not found!&#039;);
      }
      else {
         let newAllElemsCount = document.querySelectorAll(&#039;a#thumbnail&#039;).length;
         if (!(newAllElemsCount &gt; allElemsCount))
            counter++;
         else {
            allElemsCount = newAllElemsCount;
            window.scrollTo(0, document.querySelector(&#039;ytd-app&#039;).scrollHeight);
         }
      }
   }, 2000);
})(&#039;НАЗВАНИЕ КАНАЛА&#039;);
)</code></pre></div><p>Ну, массив с запросами, понятно: <br /></p><div class="codebox"><pre><code>let zaprosi = [&quot;Запрос1&quot;, &quot;Запрос2&quot;, &quot;Запрос3&quot;]</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Michael)]]></author>
			<pubDate>Tue, 02 Feb 2021 09:18:44 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=145707#p145707</guid>
		</item>
	</channel>
</rss>
