Что нового

IE считка исходного кода в переменную

zoxer1

Знающий
Сообщения
72
Репутация
6
Здравствуйте и с Наступающим всех.
Начал разбирать IE. На данный момент у меня скрипт открывает страницу (_IECreate) и вытаскивает таблицу (_IETableWriteToArray) в массив.
Теперь вопрос стал таким таким образом: можно ли считать теже данные без открытия страницы? т.е. чтоб не открывался IE и не загружались картинки (получить исходный код страницы)

простите, если не так объяснил свою проблему. :whistle:

:IL_AutoIt_1:
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
В случае с IE, грузится будет весь контент, даже если IE вызван скрытно.
Чтобы просто получить код страницы, используйте:
Код:
Dim $sData = InetRead("http://ya.ru")
ConsoleWrite(BinaryToString($sData) & @LF)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Garrett
Наверное, лучше
Код:
;...
$sData = InetRead("http://ya.ru", 1)
;...
И, в зависимости от кодировки страницы, может понадобиться (не обязательно) Encoding.au3.
 
Автор
Z

zoxer1

Знающий
Сообщения
72
Репутация
6
спасибо InetRead помогло.
теперь встал новый вопрос... не стал создавать новую тему
помогите с рег. выражениями.
есть такие строки в середине документа

Код:
<table class="item" cellspacing="0" cellpadding="0">
<tr><td class="head-l">Котировки валют</td><td class="head-side-l"><img src="____/13000000.gif" alt=""></td></tr>
<tr><td class="content-l center">
<table class="grid">
<tr><td class="label">1 USD:</td><td>30.272 руб.</td></tr>
<tr><td class="label">1 EUR:</td><td>40.0226 руб.</td></tr>
<tr><td class="label">10 UAH:</td><td>38.023 руб.</td></tr>
<tr><td class="label">1000 UZS:</td><td>18.4585 руб.</td></tr>
<tr><td class="label">1000 BYR:</td><td>10.0705 руб.</td></tr>
<tr><td class="label">1 XAU:</td><td>1380.50 USD</td></tr>
</table>
</td><td class="content-side-l"><img src="_____/14000000.gif" alt=""></td></tr>
</table>
как вытащить только цифры 30.272 руб., 40.0226 руб. и тд.
прошу не ругать, что оффтоп :whistle:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
zoxer1
Попробуйте так:
Код:
#include <Array.au3>

$sText = FileRead('test.txt')
$aText = StringRegExp($sText, '<td>(\d+\.?\d+.*?)</td>', 3)
If IsArray($aText) Then
	_ArrayDisplay($aText)
EndIf

В файле test.txt Ваш текст.
 
Автор
Z

zoxer1

Знающий
Сообщения
72
Репутация
6
спасибо, на ТХТ файле хорошо работает, а на данных, которые InetRead вытащил из интернета - не хочет работать :(
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
zoxer1
Я же не знаю ссылку на страницу.
 
Автор
Z

zoxer1

Знающий
Сообщения
72
Репутация
6
c рег выражениями вроде разобрался. за это спасибо всем.

а теперь можно ли сделать ProgressBar для загрузки страницы?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
zoxer1
Посмотрите в англ. справке пример к функции ObjEvent ().
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
zoxer1 [?]
а теперь можно ли сделать ProgressBar для загрузки страницы?
ProgressBar - отображающий ход получения данных с помощью InetRead и её последующий парсинг?

Если да, то это GUI функция:
Код:
GUICtrlCreateProgress

Пример в справке.
 
Автор
Z

zoxer1

Знающий
Сообщения
72
Репутация
6
Что-то не очень у меня получается заставить работать ProgressBar
чтоб вычислить прогресс надо ведь знать размер загружаемой страницы и объем уже загруженной информации на тот или иной момент считывания с помощью InetRead. в этом-то и проблема у меня :'(

пока написал "топором" (так сказать) вот такой вот скрипт

Код:
#include <Array.au3>
#include <INet.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GuiIPAddress.au3>
#Include <Date.au3>
#Region ### START Koda GUI section ###
$Form1_1 = GUICreate("MegaExchange.ru", 404, 124, 207, 130)
$Label1 = GUICtrlCreateLabel("Курс:", 16, 8, 47, 24)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
$Label2 = GUICtrlCreateLabel(" ", 108, 8, 148, 24)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
$Label3 = GUICtrlCreateLabel("В кассе:", 16, 48, 73, 24)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
$Label4 = GUICtrlCreateLabel(" ", 108, 48, 148, 24)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
$Button1 = GUICtrlCreateButton("Обновить", 280, 8, 107, 25)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
$Button2 = GUICtrlCreateButton("Выход", 280, 40, 107, 25)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
$StatusBar1 = _GUICtrlStatusBar_Create($Form1_1)
_GUICtrlStatusBar_SetSimple($StatusBar1)
_GUICtrlStatusBar_SetText($StatusBar1, "asdasd")
$Progress1 = GUICtrlCreateProgress(8, 81, 387, 13)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###


Global $price
Global $total
GetData()
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

		Case $Button1
			GetData()
		Case $Button2
			Exit		
	EndSwitch	
WEnd
Func GetData()	
	_GUICtrlStatusBar_SetText($StatusBar1, "Обновляемся...")
	
	HttpSetProxy(2, "192.168.1.201:3128")
	Dim $sData = BinaryToString(InetRead('http://www.megaexchange.ru/'))
	
	;$patern1 = '<tr><td class="label">(.*?)</td><td>(.*?)</td></tr>'
	$patern1 = '<td>(\d+\.?\d+.*?) руб.</td>'
	$patern2 = "(?i)\'auto\'\]\[6\]\[1\] = \'(.*?) WMR\'";
	$aText = StringRegExp($sData, $patern1, 1)
	If IsArray($aText) Then
		$price = $aText[0]
		GUICtrlSetData($Label2, $price & " WMR")
	EndIf
	$aText1 = StringRegExp($sData, $patern2, 1)
	If IsArray($aText) Then
		$total = $aText1[0]
		GUICtrlSetData($Label4, $total & " WMR")
		_GUICtrlStatusBar_SetText($StatusBar1, "Обновлено в " &  _Now() )
	EndIf
EndFunc


как суда теперь вставить правильный прогресс?
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
zoxer1
И так, алгаритм:
1. Старт считывания страница - прогресс 0%
2. InetRead завершила работу - прогресс 50%
3. Все рег выражения завершили свою работу - прогресс 100% (если рег выражений много, то можно выполнение каждго считать за 10-20% (ну подрасчитать как надо)
4. Вывод результат пользователю
 
Автор
Z

zoxer1

Знающий
Сообщения
72
Репутация
6
`p r o x y сказал(а):
zoxer1
И так, алгаритм:
1. Старт считывания страница - прогресс 0%
2. InetRead завершила работу - прогресс 50%
3. Все рег выражения завершили свою работу - прогресс 100% (если рег выражений много, то можно выполнение каждго считать за 10-20% (ну подрасчитать как надо)
4. Вывод результат пользователю
Спасибо Вам за толковый ответ. Я это так и представлял. Но нельзя ли посчитать процент загрузки InetRead? :whistle:
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
zoxer1 [?]
Но нельзя ли посчитать процент загрузки InetRead?
Хмм, дело в том, что для вычисления необходимо узнать итоговый размер страницы, а стандартными средствами AutoIt это не получится сделать. Уверен можно по другому, но как, я не в курсе. А стандартными средствами можно узнать только размер файла.

Так вот, если узнать итоговой размер страницы, то ее можно скачивать в файл с помощью InetGet и в цикле "брать" размер скачиваемоего temp файла и устанавливать размер Прогрес бара.

А так долго загружается страница, что ли?
 
Автор
Z

zoxer1

Знающий
Сообщения
72
Репутация
6
интернет у меня слабенький (грузится секунды 4-5) и с лимитом. поятому не хочется загрузать всю страницу с картинками, но и обновлять страницу надо постоянно потому как не все гда бывает доступная сумма нужная для обмена.

ну если нельзя узнать никак, то, в принципе, тема решена, скрипт работает и работает удовлетворительно
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
1) InetGet Загружает только HTML код страницы. Т.е. без картинок.

2) Если решена, то необходимо и отметить, что решена.
 
Верх