Что нового

Вырезать ссылку из множества DIV'ов

gloss

Ленивое кодило
Сообщения
155
Репутация
5
На странице получаю все div'ы giveaway__row-inner-wrap
Из него нужно получить ссылку. Пример: /giveaway/CEilq/deus-ex-human-revolution-directors-cut

Набросал следующий скрипт:
Код:
#include <IE.au3>
$url = 'http://www.steamgifts.com/giveaways/search?type=wishlist'
$oIE = _IECreate($url)
;Local $oTags
$oDivs = _IETagNameGetCollection($oIE, 'div')
For $oDiv In $oDivs
	If $oDiv.className == 'giveaway__row-inner-wrap' Then
		$1 = StringRegExp($oDiv.innerHtml, '(?s)<a class="giveaway__heading__name" href="(.*?)">', 3)
		;ConsoleWrite($oDiv.innertext&@CRLF&'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'&@CRLF)
		;ConsoleWrite($oDiv.innerHtml&@CRLF&'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'&@CRLF)
		;ExitLoop
		ConsoleWrite($1&@CRLF&'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'&@CRLF)
	EndIf
Next
_IEQuit($oIE)
Но регулярка ничего не возвращает, хотя, в очень похожем скрипте она работает.

Тот самый div
Код:
<div class="giveaway__row-inner-wrap">
					<div class="giveaway__summary">
						<h2 class="giveaway__heading">
							<a class="giveaway__heading__name" href="/giveaway/CEilq/deus-ex-human-revolution-directors-cut">Deus Ex: Human Revolution - Director's Cut</a><span class="giveaway__heading__thin">(20P)</span><a class="giveaway__icon" rel="nofollow" target="_blank" href="http://store.steampowered.com/app/238010/"><i class="fa fa-steam"></i></a><i data-popup="popup--hide-games" data-game-id="9777" class="giveaway__icon giveaway__hide trigger-popup fa fa-eye-slash"></i>
						</h2>
						<div class="giveaway__columns">
							<div><i class="fa fa-clock-o"></i> <span title="Tomorrow, 2:39pm">21 hours remaining</span></div><div class="giveaway__column--width-fill text-right"><span title="Today, 1:42pm">3 hours ago</span> by <a class="giveaway__username" href="/user/ravencult">ravencult</a></div></div>
							<div class="giveaway__links">
								<a href="/giveaway/CEilq/deus-ex-human-revolution-directors-cut/entries"><i class="fa fa-tag"></i> <span>216 entries</span></a>
								<a href="/giveaway/CEilq/deus-ex-human-revolution-directors-cut/comments"><i class="fa fa-comment"></i> <span>6 comments</span></a>
							</div>
						</div><a href="/user/ravencult" class="global__image-outer-wrap global__image-outer-wrap--avatar-small"><div class="global__image-inner-wrap" style="background-image:url(https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/65/65498e11b60f37463fd05f62af555ed90fa15c88_medium.jpg);"></div></a><a class="global__image-outer-wrap global__image-outer-wrap--game-medium" href="/giveaway/CEilq/deus-ex-human-revolution-directors-cut"><div class="global__image-inner-wrap" style="background-image:url(http://cdn.akamai.steamstatic.com/steam/apps/238010/capsule_184x69.jpg);"></div>
					</a>
				</div>

P.S. Как обозвать тему лучше фантазии не хватило. :whistle:
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
А если так:
Код:
ConsoleWrite($1[0]&@CRLF&'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'&@CRLF)
 
Автор
G

gloss

Ленивое кодило
Сообщения
155
Репутация
5
Опять делаю элементарные ошибки ;D
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
С помощью HtmlXPath:

Код:
#include <HtmlXPath.au3>

$sHTML = BinaryToString(InetRead('http://www.steamgifts.com/giveaways/search?type=wishlist', 1))

$sResult = _HtmlXPath_Select($sHTML, 'div[@class="giveaway__row-inner-wrap"][11]/div[@class="giveaway__summary"]/h2/a[@class="giveaway__heading__name"]', True, 0, 'href')
$iExtended = @extended
$iError = @error
	
Switch $iError
	Case 0
		MsgBox(64, 'Title', StringRegExpReplace($sResult, '(?i)^about:', ''))
	Case 1
		MsgBox(48, 'Error', 'Unable to initialize HTMLFILE object')
	Case 2
		MsgBox(48, 'Error', 'Unable to load Html data')
	Case 3
		MsgBox(48, 'Error', 'XPath result does not matches XPath query')
EndSwitch
 
Автор
G

gloss

Ленивое кодило
Сообщения
155
Репутация
5
CreatoR сказал(а):
С помощью HtmlXPath:

Код:
#include <HtmlXPath.au3>

$sHTML = BinaryToString(InetRead('http://www.steamgifts.com/giveaways/search?type=wishlist', 1))

$sResult = _HtmlXPath_Select($sHTML, 'div[@class="giveaway__row-inner-wrap"][11]/div[@class="giveaway__summary"]/h2/a[@class="giveaway__heading__name"]', True, 0, 'href')
$iExtended = @extended
$iError = @error
	
Switch $iError
	Case 0
		MsgBox(64, 'Title', StringRegExpReplace($sResult, '(?i)^about:', ''))
	Case 1
		MsgBox(48, 'Error', 'Unable to initialize HTMLFILE object')
	Case 2
		MsgBox(48, 'Error', 'Unable to load Html data')
	Case 3
		MsgBox(48, 'Error', 'XPath result does not matches XPath query')
EndSwitch
Я с самого начала хотел попробовать вашу UDF, но мозгов не хватило понять что к чему.
Пример выдает XPath result does not matches XPath query.

И консоль
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
gloss [?]
Версия 0.2; IE 11.0.9600.17631
Короче ну его в баню, я же говорил что не люблю объекты, переделаю с испол. рег. выражений.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
gloss [?]
Версия 0.2; IE 11.0.9600.17631
Проверил на виртуальной машине (win7 x86) с этой версией, выдаёт результат без проблем.
Версия AutoIt 3.3.8.1 - 3.3.12.0.

А примеры из архива библиотеки работают?
 
Автор
G

gloss

Ленивое кодило
Сообщения
155
Репутация
5
CreatoR сказал(а):
gloss [?]
Версия 0.2; IE 11.0.9600.17631
Проверил на виртуальной машине (win7 x86) с этой версией, выдаёт результат без проблем.
Версия AutoIt 3.3.8.1 - 3.3.12.0.

А примеры из архива библиотеки работают?
Примеры работают, попробовал ваш пример на ноуте Win7(x86), IE 9, AutoIt 3.3.10.2

Выскакивает первый MsgBox с одной из ссылок и все.
И еще консоль
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
gloss [?]
Выскакивает первый MsgBox с одной из ссылок и все.
Всё верно, так и должно быть.

Значит всё таки библиотека рабочая.
Позже выложу версию с использованием внешних ресурсов (Dll'ка основана на .Net Framework для XPath, и Dll'ка HtmLayout для CSS Selector).
На RegExp так и не удалось построить, слишком много чего нужно учитывать, да и не так уж я и силён в Html, а учить все его тонкости нет времени.
 
Верх