Что нового

Аналог documentComplite из Делфи

BlackRock

Новичок
Сообщения
16
Репутация
0
Как вывести значения со страницы, если нет ни имени ни ид? Каждое значение мне нужно вывести в отдельный label и использовать их в дальнейшем при проверках условий, причём при обновлении страницы значения динамически изменяются, в delphi есть событие documentComplite, а как это сделать в AutoIt?


Код:
<div class="context"><img src="http://sait/style/post.png" alt=""> 252360 <img src="http://saits/style/post2.png" alt=""> 1291  <img src="http://sait/style2/timer.png" alt=""> 11:27</div>
[/quote]
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Легко:
Код:
#include <ie.au3>
Global $oIe = _IECreate('about:blank')
Global $oEvent = ObjEvent($oIE, "__event_", "DWebBrowserEvents2")
_IENavigate($oIe, 'autoit-script.ru')

While 1
	Sleep(250)
WEnd

Func __event_OnQuit()
    Exit
EndFunc

Func __event_DocumentComplete($oDisp, $sUr)
	If ObjName($oDisp) Then ConsoleWrite('+ Highest level frame comleate.' & @CRLF)
	ConsoleWrite('+ Document Comleate. URL: ' & $sUr & @CRLF)
EndFunc
 
Автор
BlackRock

BlackRock

Новичок
Сообщения
16
Репутация
0
inververs сказал(а):
Легко:
Код:
#include <ie.au3>
Global $oIe = _IECreate('about:blank')
Global $oEvent = ObjEvent($oIE, "__event_", "DWebBrowserEvents2")
_IENavigate($oIe, 'autoit-script.ru')

While 1
	Sleep(250)
WEnd

Func __event_OnQuit()
    Exit
EndFunc

Func __event_DocumentComplete($oDisp, $sUr)
	If ObjName($oDisp) Then ConsoleWrite('+ Highest level frame comleate.' & @CRLF)
	ConsoleWrite('+ Document Comleate. URL: ' & $sUr & @CRLF)
EndFunc
Спасибо, в справке очень сухо написано, сейчас вроде бы смысл уловил на примере ваших двух функций. Не могли бы вы ещё помочь с первой частью вопроса, пожалуйста.
 

madmasles

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

Local $iErr = 1, $oIE, $oDivs, $sTxt, $aRet

Do
	$oIE = _IECreate(@ScriptDir & '\1.html');поменяйте на свой адрес
	If @error Then ExitLoop
	$oDivs = _IETagNameGetCollection($oIE, 'div')
	If @error Then ExitLoop
	For $oDiv In $oDivs
		If $oDiv.ClassName == 'context' Then
			$sTxt = _IEPropertyGet($oDiv, 'innertext')
			If @error Then ExitLoop 2
			$aRet = StringSplit(StringStripWS($sTxt, 7), ' ')
			ExitLoop
		EndIf
	Next
	$iErr = 0
Until 1
If $iErr Then
	MsgBox(16, 'Error', 'Error')
Else
	_ArrayDisplay($aRet)
EndIf
 
Автор
BlackRock

BlackRock

Новичок
Сообщения
16
Репутация
0
madmasles сказал(а):
BlackRock,
Попробуйте сделать примерно так.
Код:
#include <IE.au3>
#include <Array.au3>

Local $iErr = 1, $oIE, $oDivs, $sTxt, $aRet

Do
	$oIE = _IECreate(@ScriptDir & '\1.html');поменяйте на свой адрес
	If @error Then ExitLoop
	$oDivs = _IETagNameGetCollection($oIE, 'div')
	If @error Then ExitLoop
	For $oDiv In $oDivs
		If $oDiv.ClassName == 'context' Then
			$sTxt = _IEPropertyGet($oDiv, 'innertext')
			If @error Then ExitLoop 2
			$aRet = StringSplit(StringStripWS($sTxt, 7), ' ')
			ExitLoop
		EndIf
	Next
	$iErr = 0
Until 1
If $iErr Then
	MsgBox(16, 'Error', 'Error')
Else
	_ArrayDisplay($aRet)
EndIf
А можно сделать без массива, т.е. мы достали текст из div: $sTxt = _IEPropertyGet($oDiv, 'innertext') и дальше перебором разделить каждое значение и вставить их в отдельные label в gui? И чтобы уже разобраться до конца с этим вопросом: если таких div с одинаковым классом будет несколько на странице, как провести ту же операцию допустим со вторым по счёту? Извините, если достал своими вопросами, но мне нужно в этом разобраться и без вашей помощи не обойтись.
 

madmasles

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

Global $hGui, $aLbl[5], $oIE, $iBtn, $aInfo

$oIE = _IECreate(@ScriptDir & '\index.htm');поменяйте на свой адрес
$hGui = GUICreate('Info', 250, 200)
$iBtn = GUICtrlCreateButton('Click me', 75, 10, 100, 30)
For $i = 0 To 4
	$aLbl[$i] = GUICtrlCreateLabel('', 25, 50 + $i * 30, 200, 20)
	GUICtrlSetBkColor(-1, 0xF0FFFF)
Next
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			_IEQuit($oIE)
			Exit
		Case $iBtn
			$aInfo = _GetInfo($oIE)
			If @error Then
				ConsoleWrite('Error' & @LF)
				ContinueLoop
			EndIf
			For $i = 0 To 4
				GUICtrlSetData($aLbl[$i], $aInfo[$i])
			Next
			$aInfo = 0
	EndSwitch
WEnd

Func _GetInfo($o_IE, $i_Index = 1, $i_Ub = 5)
	Local $o_Divs, $s_Txt, $a_Ret, $i_Num = 0

	Do
		$o_Divs = _IETagNameGetCollection($o_IE, 'div')
		If @error Then ExitLoop
		For $o_Div In $o_Divs
			If $o_Div.ClassName == 'butt_bott' Then
				If $i_Num = $i_Index Then
					$s_Txt = _IEPropertyGet($o_Div, 'innerhtml')
					If @error Then ExitLoop 2
					$a_Ret = StringRegExp($s_Txt, '>\h(.+?)(?=\h<|$)', 3)
					If UBound($a_Ret) = $i_Ub Then Return $a_Ret
				EndIf
				$i_Num += 1
			EndIf
		Next
	Until 1
	Return SetError(1, 0, 0)
EndFunc   ;==>_GetInfo
Предупреждение За нарушение общих правил (пункт В.2):
Старайтесь избегать “Over quoting” (преувеличенное цитирование) - цитируйте только необходимую часть сообщения, которая наилучшим образом подчеркнёт суть цитируемого.


С уважением, ваш Модератор.
 
Верх