Что нового

[Сеть, интернет] WinHTTP не выводит все ссылки на сайте

Redline

AutoIT Гуру
Сообщения
506
Репутация
369
Имеется сайт video.yandex.ru
Пытаюсь получить все ссылки на видео через WinHTTP, но он их не видит, возможно все дело в фреймах.
Пример на WinHTTP (нерабочий) - выводит все "вменяемые" ссылки
Код:
#include <Array.au3>
$sUrl = 'http://video.yandex.ru'
Global $oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
$oHTTP.Open('GET', $sUrl, False)
$oHTTP.Send('')
$oHTTP.WaitForResponse
$sHTML = $oHTTP.responseText
$aLinks = StringRegExp($sHTML, '(?si)<a.*?href="(http://.*?)".*?/a>', 3)
_ArrayDisplay($aLinks)


Пример на _IE функциях, вполне рабочий - выводит только ссылки на youtube
Код:
#include <Array.au3>
#include <IE.au3>
$oIE = _IECreate('http://video.yandex.ru', 0, 1)
Sleep(1500)
$oLinks = _IELinkGetCollection($oIE)
$j = -1
Dim $aLinks[1][2]
For $oLink In $oLinks
	If StringInStr($oLink.href, 'youtube.com/') Then
		$j += 1
		ReDim $aLinks[$j + 1][2]
		$aLinks[$j][0] = $oLink.innertext
		$aLinks[$j][1] = $oLink.href
	EndIf
Next
_ArrayDisplay($aLinks)


Существует ли решение?
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
Ага ага... ;D только стал больше вникать в RegExp благодаря твоим http://autoit-script.ru/index.php?topic=4901.msg35499;topicseen#new
Столкнулся с той же проблемой.
OffTopic:

Где добыть описание/справку и т.д. по WinHTTP? Сам пока ничего путного не нарыл.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 473
Репутация
2 403
Redline [?]
Пример на _IE функциях, вполне рабочий - выводит только ссылки на youtube
У меня вообще не выводит ссылок, т.к на странице их просто нет (содержащих youtube).
А что если попробовать через InetRead?

Код:
#include <Array.au3>

$sUrl = 'http://video.yandex.ru'
$sHTML = BinaryToString(InetRead($sUrl))
$aLinks = StringRegExp($sHTML, '["''](http://.*?)["'']', 3)

_ArrayDisplay($aLinks)
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
Yandex впереди планеты всей, по всяким "плюшкам" ;D
Там просто много динамического кода.
Redline, попробуйте так, у меня на IE7 в 90% срабатывает.

Код:
#include<IE.au3>
$oIE = _IECreate("http://video.yandex.ru")
$oLinks = _IETagNameGetCollection($oIE, "a")

For $oLink In $oLinks
	If $oLink.className == "b-head-name__link" Then 
		$oClick = $oLink
	EndIf
Next

_IEAction($oClick, "click")

For $oLink In $oLinks
	If $oLink.className = "b-link b-video__title" Then
		ConsoleWrite($oLink.href & @CRLF)
	EndIf
Next
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
CreatoR сказал(а):
У меня вообще не выводит ссылок, т.к на странице их просто нет (содержащих youtube).
Они там есть... их 32 шт. =)

А так уже вытаскивал ссылки на видео с пометкой "новое" через IE.au3. http://autoit-script.ru/index.php?topic=4782.0
Но WinHttp должно работать надежнее не зависимо от версии IE...
 

r35p3ct

Продвинутый
Сообщения
228
Репутация
60
Где то так: :ninja:
Код:
#include <Array.au3>
$sUrl = 'http://video.yandex.ru/top-archive/rss/'
Global $oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
$oHTTP.Open('GET', $sUrl, False)
$oHTTP.Send('')
$oHTTP.WaitForResponse
$sHTML = $oHTTP.responseText
$aLinks = StringRegExp($sHTML, 'http://www.youtube.com/v/.*?"', 3)
_ArrayDisplay($aLinks)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 473
Репутация
2 403
Автор
Redline

Redline

AutoIT Гуру
Сообщения
506
Репутация
369
Garrett
Искал решение именно без использования _IE
CreatoR
У меня ссылки через _IE выводит после второго запуска скрипта, не знаю с чем связано.
r35p3ct
Спасибо!
Вот еще думал, что могут быть другие источники контента типа "версии для PDA"
 
Верх