Что нового

Как забрать код страницы на сервере требующей авторизации

darkwhite

Новичок
Сообщения
129
Репутация
4
Проблема вот в чем
Авторизируюсь на сайте с помощью библиотеки IE
после чего хочу получить источник страницы index


но
Код:
_INetGetSource
возращает заглавную страницу авторизации.
Я так понимаю у него отсутвуют куки которые получает IE ?


выбрал
Код:
_INetGetSource
потому как
Код:
_IEBodyReadHTML
требует полной загрузки страницы в IE.
что при больших объемах обработки (что и хотелось бы) не совсем хорошо
не поскажите как со всем этим разобраться как получить код страницы не дожидаясь полной загрузке в IE всех рисунков и т.п.?
 

BIOS

Жизнь - игра. График - супер, но сюжет - хреновый.
Сообщения
173
Репутация
69
Можно не дожидаясь загрузки(без _IELoadWait) всё время проверять содержимое _IEBodyReadHTML на наличие контрольной строки
Как только она появилась - значит весь нужный текст тоже уже есть, и можно пользовать
 

shakur

Осваивающий
Сообщения
76
Репутация
24
не поскажите как со всем этим разобраться как получить код страницы не дожидаясь полной загрузке в IE всех рисунков и т.п.?
как вариант отключите в IE загрузку рисунков и т.п.
 
Автор
D

darkwhite

Новичок
Сообщения
129
Репутация
4
madmasles
Да вот и не хотелось бы полностью переписывать уже готовый скрипт :scratch:- но как совершенствование нужно будет обязательно разобрать WinHTTP :beer:

BIOS
Можно не дожидаясь загрузки(без _IELoadWait) всё время проверять содержимое _IEBodyReadHTML на наличие контрольной строки
Как только она появилась - значит весь нужный текст тоже уже есть, и можно пользовать
Именно о таком варианте и думал пока пост писал :D вопрос как поймать ошибку TimeOut соеденения просто как @error :-\

shakur
как вариант отключите в IE загрузку рисунков и т.п.
А средствами AutoiT это можно сделать еще и с работающим параллельно IE ? и чтобы потом еще на место вернуть , для нормальной последующей работы IE

а вообще интересно конечно получается что
Код:
_INetGetSource

не способна захватывать страницы из авторизированных источников?
 
Автор
D

darkwhite

Новичок
Сообщения
129
Репутация
4
сделал так
Код:
$bodyComplete=False
				Do
					Sleep(1500)
					$oHTML=_IEDocReadHTML($oIE)
					if StringRegExp($oHTML,'(?i).*?</body>.*',0) then $bodyComplete=True
				Until $bodyComplete

все это дело в цикле с навигацией по страницам списка

как оказалось
Код:
_IEBodyReadHTML

не подойдет для быстрой обработки больших объемов (хотя бы 100 страниц)
так как для того чтобы объект oIE обновился требуется ,наверное, его полная загрузка. У меня от 1.5-2 секунды (sleep (1500))
иначе он вытаскивает HTML предыдущей страницы :blink: :wacko: :shok: :mad:

а две секунды на 100 страниц это уже 200 секунд много ))
потому пошел изучать Winhttp ))
 
Автор
D

darkwhite

Новичок
Сообщения
129
Репутация
4
:laugh: порылся в свойствах и методах объекта IE и обнаружил такое свойство как ReadyState. :-\
Исходя из этого переписал исходный код заменил цикл проверки загрузки соответвующим образом )
вроде работает. 8)

Код:
#include <IE.au3>
global $oHtml

$oIE = _IECreate ('')
_IENavigate($oIE,'www.yandex.ru',0)
	$filename='Hall.htm'
	FileOpen($filename,1)
	$bodyComplete=False
	Do
		Sleep(100)
		FileWrite($filename,'1 состояние '& $oIE.document.ReadyState&@CRLF)
		if ($oIE.document.ReadyState='interactive') then 
			if StringRegExp(_IEDocReadHTML($oIE),'(?i)</table>',0) then $oIE.stop
		EndIf
		if $oIE.document.ReadyState='complete' then $bodyComplete=True
	Until $bodyComplete
$oHtml=_IEDocReadHTML($oIE)
FileWrite($filename,$oHtml)
FileClose($filename)
_IEQuit($oIE)


условие
Код:
StringRegExp(_IEDocReadHTML($oIE),'(?i)</table>',0)
является проверкой до первого закрывающего тега таблицы. так как закрывающий тег body существует даже не у полностью загруженной страницы. потому ищем по содержанию например по концу таблицы. ну или по любому другому признаку )))
:IL_AutoIt_1:
может кому пригодятся :whistle:
 
Верх