<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBS: парсинг html-страницы]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=13686</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=13686&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBS: парсинг html-страницы».]]></description>
		<lastBuildDate>Sun, 13 May 2018 13:39:31 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBS: парсинг html-страницы]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=125322#p125322</link>
			<description><![CDATA[<p>В Chrome Developer Tools на вкладке Network видно, что страница перед показом результатов получает AJAX&#039;ом все данные в JSON формате вот по этому URL: <a href="https://tickets.fifa.com/API/WCachedL1/ru/BasicCodes/GetBasicCodesAvailavilityDemmand?currencyId=RUB">https://tickets.fifa.com/API/WCachedL1/ … encyId=RUB</a>. Решил посмотреть, насколько пригоден ответ для парсинга. В массиве Data.Availability приведено наличие билетов для каждого матча и каждой категории зрителя. Каждый элемент масива содержит объект с 3 свойствами:</p><div class="codebox"><pre><code>		{
			&quot;p&quot;: &quot;IMT01&quot;,
			&quot;c&quot;: 37,
			&quot;a&quot;: 0
		}
</code></pre></div><p>p - это ProductId, его можно найти в другом массиве выше Data.PRODUCTIMT,<br />c - это категория зрителя, их также можно найти в массиве Data.CATEGORIES,<br />a - по всей видимости, количество доступных билетов.<br />Сначала я был удивлен, когда в ответе нашел фрагмент &quot;a&quot;:1, но все стало понятно, когда нашел категорию &quot;c&quot;:18 - это объект с &quot;CategoryId&quot;:18 в массиве Data.CATEGORIES.<br />Нас же интересуют ненулевые &quot;a&quot; для &quot;c&quot; с 14 по 16. Можно распарсить даже простой регуляркой.</p>]]></description>
			<author><![CDATA[null@example.com (omegastripes)]]></author>
			<pubDate>Sun, 13 May 2018 13:39:31 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=125322#p125322</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: парсинг html-страницы]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=125243#p125243</link>
			<description><![CDATA[<p><strong>Malcev</strong>, хм, действительно, так всё работает. Спасибо! Пошел дальше мутить...</p>]]></description>
			<author><![CDATA[null@example.com (The_Immortal)]]></author>
			<pubDate>Tue, 08 May 2018 19:39:05 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=125243#p125243</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: парсинг html-страницы]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=125241#p125241</link>
			<description><![CDATA[<p>Значит замените квадратные на круглые.<br />Так у меня с вашей ссылкой работает.<br /></p><div class="codebox"><pre><code>WScript.Echo .document.getElementsByClassName(&quot;row rowBox rowBoxEven&quot;)(0).getElementsByClassName(&quot;header&quot;)(0).innertext</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Tue, 08 May 2018 19:20:38 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=125241#p125241</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: парсинг html-страницы]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=125239#p125239</link>
			<description><![CDATA[<p><strong>Malcev</strong>, да давайте далеко ходить не будем и слегка отпарсим <a href="http://forum.script-coding.com">главную страницу форума</a>:<br /></p><div class="codebox"><pre><code>Option Explicit

Const READYSTATE_COMPLETE = 4 
Const TimeOut = 10000
Const link = &quot;http://forum.script-coding.com&quot;

With WScript.CreateObject(&quot;InternetExplorer.Application&quot;)
	.Visible = False
	.Navigate link
	
	Do
		WScript.Sleep TimeOut	&#039; ожидаем загрузку страницы
	Loop Until Not .Busy And .ReadyState = READYSTATE_COMPLETE
	
	WScript.Echo .document.getElementsByClassName(&quot;item-subject&quot;)(0).innerText
	&#039;WScript.Echo .document.getElementsByClassName(&quot;item-subject&quot;)[0].innerText

	.Quit
End With

WScript.Quit 0</code></pre></div><p>Вывелся текст? Ну а теперь уберите комментарий и попробуйте запустить повторно:</p><p><span class="postimg"><img src="https://content.screencast.com/users/The_Immortal/folders/Snagit/media/32d8bf71-e9c7-4f57-9af5-c0aba0d1e21e/05.08.2018-22.13.png" alt="https://content.screencast.com/users/The_Immortal/folders/Snagit/media/32d8bf71-e9c7-4f57-9af5-c0aba0d1e21e/05.08.2018-22.13.png" /></span></p>]]></description>
			<author><![CDATA[null@example.com (The_Immortal)]]></author>
			<pubDate>Tue, 08 May 2018 19:12:02 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=125239#p125239</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: парсинг html-страницы]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=125234#p125234</link>
			<description><![CDATA[<p>Приведите свой код, в котором возникает ошибка.</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Tue, 08 May 2018 18:58:44 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=125234#p125234</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: парсинг html-страницы]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=125233#p125233</link>
			<description><![CDATA[<p><strong>Malcev</strong>, в случае с <strong>VBS</strong> конкретные ноды указываются в круглых скобках, а если указать круглые скобки, то:<br /></p><div class="quotebox"><cite>The_Immortal пишет:</cite><blockquote><p>возникает ошибка</p></blockquote></div>]]></description>
			<author><![CDATA[null@example.com (The_Immortal)]]></author>
			<pubDate>Tue, 08 May 2018 18:57:09 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=125233#p125233</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: парсинг html-страницы]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=125232#p125232</link>
			<description><![CDATA[<p>Должны восприниматься.<br /><a href="https://www.w3schools.com/jsref/met_element_getelementsbyclassname.asp">https://www.w3schools.com/jsref/met_ele … ssname.asp</a></p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Tue, 08 May 2018 18:54:47 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=125232#p125232</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: парсинг html-страницы]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=125230#p125230</link>
			<description><![CDATA[<p><strong>Malcev</strong>, не-а - такая строка не воспринимается. Квадратные скобки, как я понял, недопустимы.</p><p>P.S. Неужели никто никогда не парсил HTML через VBS? <img src="//forum.script-coding.com/img/smilies/big_smile.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (The_Immortal)]]></author>
			<pubDate>Tue, 08 May 2018 18:45:15 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=125230#p125230</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: парсинг html-страницы]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=125201#p125201</link>
			<description><![CDATA[<div class="codebox"><pre><code>document.getElementsByClassName(&quot;row rowBox rowBoxEven&quot;)[0].getElementsByClassName(&quot;header&quot;)[0].innertext</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Mon, 07 May 2018 21:56:50 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=125201#p125201</guid>
		</item>
		<item>
			<title><![CDATA[VBS: парсинг html-страницы]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=125180#p125180</link>
			<description><![CDATA[<p>Приветствую!</p><p>Возникла необходимость отслеживать на сайте <a href="https://tickets.fifa.com/Services/ADService.html?lang=ru">фифы</a> доступность билетов. Есть список интересующих матчей, которые нужно мониторить.</p><p>Алгоритм придумал следующий:</p><p>1. Формирую массив MatchName, состоящий из названий необходимых для отслеживания матчей:<br />- Матч 01 - Россия : Саудовская Аравия - Москва «Лужники»<br />- Матч 07 - Аргентина : Исландия - Москва «Спартак»<br />- Матч 11 - Германия : Мексика - Москва «Лужники»</p><p>2. Поочередно получаю в NodeList дивы с классом &quot;header&quot; (див внутри первого столбец таблицы) и заглядываю внутрь каждого (через innerText), сверяя название текущего матча с первым элементом массива MatchName:<br /></p><div class="codebox"><pre><code>&lt;div class=&quot;header&quot; ng-bind=&quot;product.productName&quot;&gt;Матч 01 - Россия : Саудовская Аравия - Москва «Лужники»&lt;/div&gt;</code></pre></div><p>3. Если название совпало, то <em>каким-то образом</em> перехожу к соседнему диву &quot;col-sm-9 col-xs-12&quot; (второй таблицы) и также <em>каким-то образом</em> изымаю имя класса внутреннго дива для всех 4 квадратов.</p><p>Ключевое - это определить класс &quot;class=&quot;categoryBox <strong>zeroAvailability</strong>&quot; - т.е. если этот класс НЕ &quot;zeroAvailability&quot;, то далее кидается алерт.</p><p>4. Аналогично пройтись по остальным элементам массива MatchName.</p><br /><br /><p>Ну в общем, я начал:</p><div class="codebox"><pre><code>Option Explicit

Const READYSTATE_COMPLETE = 4 
Const TimeOut = 10000
Const link = &quot;https://tickets.fifa.com/Services/ADService.html?lang=ru&quot;

Dim objNodeList, i, j

Dim MatchName(2)	&#039; массив из искомых названий матчей 
MatchName(0) = &quot;Матч 01 - Россия : Саудовская Аравия - Москва «Лужники»&quot;
MatchName(1) = &quot;Матч 07 - Аргентина : Исландия - Москва «Спартак»&quot;
MatchName(2) = &quot;Матч 11 - Германия : Мексика - Москва «Лужники»&quot;

With WScript.CreateObject(&quot;InternetExplorer.Application&quot;)
	.Visible = False
	.Navigate(link)
	
	Do
		WScript.Sleep TimeOut	&#039; ожидаем загрузку страницы
	Loop Until Not .Busy And .ReadyState = READYSTATE_COMPLETE
	
	Set objNodeList = .document.getElementsByClassName(&quot;header&quot;)	&#039; получаем в NodeList все элементы с указанным классом

	For i = 0 to 2 Step 1
		For j = 0 to objNodeList.length Step 1	
			&#039; ...
		Next		
			
	Next	

	Set objNodeList = Nothing
	
	.Quit
End With

WScript.Quit 0</code></pre></div><br /><p>Вопросы следующие:</p><p>1. Вопрос касательно общего алгоритма... Может быть как-то задачу попроще можно решить или логика моя пойдет?</p><p>2. Если возможно, то подскажите, пожалуйста, каким образом можно перемещаться по соседним div&#039;ам (из пункта 3. алгоритма)?</p><p>Спасибо!</p><br /><br /><br /><p><strong>UPD</strong>: господа, обрисовываю проблему более узко. Не могли бы вы подсказать каким образом можно сразу по имени класса обратиться к дочерним элементам коллекции NodeList?</p><p>К примеру, имеется такая html-структура:</p><div class="codebox"><pre><code>&lt;div class=&quot;row rowBox rowBoxEven&quot; ng-class=&quot;{&#039;rowBoxOdd&#039;:$odd, &#039;rowBoxEven&#039;:$even}&quot; ng-repeat=&quot;product in AD.filteredList track by product.productId&quot;&gt;
            &lt;div class=&quot;col-sm-3 col-xs-12&quot;&gt;
                &lt;div class=&quot;row&quot;&gt;
                    &lt;div class=&quot;header&quot; ng-bind=&quot;product.productName&quot;&gt;Матч 01 - Россия : Саудовская Аравия - Москва «Лужники»&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;row&quot;&gt;
                    &lt;div class=&quot;col-lg-3 col-md-3 col-sm-3 col-xs-3&quot; ng-show=&quot;product.productTypeCode==AD.productTypeEnum.IMT&quot;&gt;
                        &lt;div&gt;Матч 1&lt;/div&gt;
                    &lt;/div&gt;
                    &lt;div class=&quot;col-lg-3 col-md-3 col-sm-3 col-xs-3 ng-hide&quot; ng-show=&quot;product.productTypeCode==AD.productTypeEnum.VST&quot;&gt;
                        &lt;div&gt;Матчи 1&lt;/div&gt;
                    &lt;/div&gt;
                    &lt;div class=&quot;col-lg-3 col-md-3 col-sm-3 col-xs-3&quot;&gt;
                        &lt;div&gt; 14 ИЮН 18:00&lt;/div&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;col-sm-9 col-xs-12&quot;&gt;
                &lt;!----&gt;&lt;!----&gt;&lt;div class=&quot;pull-left&quot; ng-show=&quot;cat.availability!==-1&quot; ng-repeat=&quot;cat in product.categories track by cat.categoryId&quot; ng-if=&quot;(AD.showSpecialTypes &amp;amp;&amp;amp; cat.accessibility) || !cat.accessibility&quot;&gt;
                    &lt;div class=&quot;categoryBox zeroAvailability&quot; ng-class=&quot;cat.availabilityColor&quot; ng-bind=&quot;cat.categoryName&quot;&gt;CAT 1&lt;/div&gt;
                &lt;/div&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;div class=&quot;pull-left&quot; ng-show=&quot;cat.availability!==-1&quot; ng-repeat=&quot;cat in product.categories track by cat.categoryId&quot; ng-if=&quot;(AD.showSpecialTypes &amp;amp;&amp;amp; cat.accessibility) || !cat.accessibility&quot;&gt;
                    &lt;div class=&quot;categoryBox zeroAvailability&quot; ng-class=&quot;cat.availabilityColor&quot; ng-bind=&quot;cat.categoryName&quot;&gt;CAT 2&lt;/div&gt;
                &lt;/div&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;div class=&quot;pull-left&quot; ng-show=&quot;cat.availability!==-1&quot; ng-repeat=&quot;cat in product.categories track by cat.categoryId&quot; ng-if=&quot;(AD.showSpecialTypes &amp;amp;&amp;amp; cat.accessibility) || !cat.accessibility&quot;&gt;
                    &lt;div class=&quot;categoryBox zeroAvailability&quot; ng-class=&quot;cat.availabilityColor&quot; ng-bind=&quot;cat.categoryName&quot;&gt;CAT 3&lt;/div&gt;
                &lt;/div&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;div class=&quot;pull-left&quot; ng-show=&quot;cat.availability!==-1&quot; ng-repeat=&quot;cat in product.categories track by cat.categoryId&quot; ng-if=&quot;(AD.showSpecialTypes &amp;amp;&amp;amp; cat.accessibility) || !cat.accessibility&quot;&gt;
                    &lt;div class=&quot;categoryBox zeroAvailability&quot; ng-class=&quot;cat.availabilityColor&quot; ng-bind=&quot;cat.categoryName&quot;&gt;CAT 4&lt;/div&gt;
                &lt;/div&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;
            &lt;/div&gt;
        &lt;/div&gt;</code></pre></div><p>Моя текущая задача обратится к внутренностям следующих div&#039;ов:<br /></p><ul><li><p>div class=&quot;header&quot;;</p></li><li><p>div class=&quot;pull-left&quot; (последовательно ко всем 4-ым).</p></li></ul><p>Я понимаю, что плясать я должен от родителя. Т.е. обращаюсь к корневому элементу:</p><div class="codebox"><pre><code>Set objNodeList = .document.getElementsByClassName(&quot;row rowBox rowBoxEven&quot;)</code></pre></div><p>Далее я хочу сразу прыгнуть на div class=&quot;header&quot;: div class=&quot;row rowBox rowBoxEven&quot; -&gt; div class=&quot;col-sm-3 col-xs-12&quot; -&gt; div class=&quot;row&quot; -&gt; div class=&quot;<strong>header</strong>&quot;. Но вот не могу допендрить как это сделать... Пробовал так:<br /></p><div class="codebox"><pre><code>Set objNodeList = .document.getElementsByClassName(&quot;row rowBox rowBoxEven&quot;)
Set child = objNodeList.getElementsByClassName(&quot;header&quot;)</code></pre></div><p>Но возникает ошибка на второй строке...</p>]]></description>
			<author><![CDATA[null@example.com (The_Immortal)]]></author>
			<pubDate>Mon, 07 May 2018 13:53:00 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=125180#p125180</guid>
		</item>
	</channel>
</rss>
