Что нового

Остановка скрипта после _IELinkClickByText

vovsla

Осваивающий
Сообщения
607
Репутация
36
На странице IE есть тест по которому нужно кликнуть, после клика появляется диалоговое окно.
После выполнение команды _IELinkClickByText окно появляется, но скрипт почему-то останавливает работу до тех пор пока окно не будет закрыто.
По клику работает функция из строки "<a onclick="SaveOEMOptionalInfo(2625005718218,'True');" href="#">View/Edit</a>"
Как можно предотвратить остановку скрипта при открытии диалогового окна?
 
Автор
V

vovsla

Осваивающий
Сообщения
607
Репутация
36
Скрин появляющегося окна
http://hostingkartinok.com/show-image.php?id=4d925134c704b4989bb23b325757c69a

Код ниже, но работать у других он не будет

Код:
#include <IE.au3>
#include <Array.au3>

Global $Title='DISAddon'
$IE=IEAttach('DIS - Key List')
If Not IsObj($IE) Then Exit
$HWin=_IEPropertyGet($IE, 'hwnd')
WinActivate($HWin)
WinSetState($HWin, '', @SW_MAXIMIZE)

$KeysInfoArr=GetKeysInfo($IE)
If Not IsArray($KeysInfoArr) Then Exit

OHRInfoChange($IE, $KeysInfoArr)


;~ --------------------------------------------------------------------------------------OHRInfoChange-------------------------------------------------------------------------------------------------------------------------
Func OHRInfoChange($IEObj, $KeysInfoArr)
	For $KeyNum=1 To 1 ;UBound($KeysInfoArr, 2)-1
		$KeyObj=_IEGetObjById($IE, $KeysInfoArr[1][$KeyNum])
TT('жмем')
		_IELinkClickByText($KeyObj, 'View/Edit')          ; Вот здесь оно и виснет

TT('ждем окно')
		WinWait('DIS - Add')
TT('аттач')
		$TMPKeyWin=IEAttach('DIS - Add')
TT('')
 $oElements = _IETagNameAllGetCollection($TMPKeyWin)
For $oElement In $oElements
    If $oElement.id Then MsgBox($MB_SYSTEMMODAL, "Element Info", "Tagname: " & $oElement.tagname & @CRLF & "id: " & $oElement.id & @CRLF & "innerText: " & $oElement.innerText)
Next

	Next
EndFunc

;~ ------------------------------------------------------------------------------------Msg------------------------------------------------------------------
Func TT($ToolTipText, $Icon=1)
	ToolTip($ToolTipText, @DesktopWidth/2, 20, $Title, $Icon, 6)
EndFunc

;~ --------------------------------------------------------------------------------------IEAttach-------------------------------------------------------------------------------------------------------------------------
Func IEAttach($String, $Mode='title')
	TT('Получение объекта IE')
	$IEObj=_IEAttach($String, $Mode)
	If @error Then
		TT('')
		Msg(16, 'Не найдено окно "'&$String&'"')
		Return False
	EndIf

	If Not IsObj($IEObj) Then
		TT('')
		Msg(16, 'Ошибка получения объекта страницы IE')
		Return False
	EndIf
	TT('')
	Return $IEObj
EndFunc

;~ --------------------------------------------------------------------------------------GetKeysInfo-------------------------------------------------------------------------------------------------------------------------
Func GetKeysInfo($IEObj)
	TT('Получение таблицы ключей')
	$oTable = _IETableGetCollection($IEObj, 7)
	If @error Then
		TT('')
		Msg(16, 'Ошибка получения таблицы ключей')
		Return False
	EndIf

	$aTableData = _IETableWriteToArray($oTable)
	If @error Then
		TT('')
		Msg(16, 'Ошибка составления таблицы ключей')
		Return False
	EndIf

	If Not IsArray($aTableData) Then
		TT('')
		Msg(16, 'Ошибка получения массива информации по ключам')
		Return False
	EndIf
	TT('')
	Return $aTableData
EndFunc

;~ --------------------------------------------------------------------------------------Msg-------------------------------------------------------------------------------------------------------------------------
Func Msg($Flag, $Text)
	$Result=MsgBox(262144+$Flag, $Title, $Text)
	Return $Result
EndFunc

;~ --------------------------------------------------------------------------------------ShowAllTables-------------------------------------------------------------------------------------------------------------------------
Func ShowAllTables($IEObj)
	$oTable = _IETableGetCollection($IEObj)
	$iNumTables = @extended
	For $Num=0 To $iNumTables
		$oTable = _IETableGetCollection($IEObj, $Num)
		$aTableData = _IETableWriteToArray($oTable)
		_ArrayDisplay($aTableData, $Num)
	Next
;~ 	7 - таблица ключей
EndFunc
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Можно написать скрипт на javascript, который через таймер нажмет на ссылку и внедрить его в код.
 
A

Alofa

Гость
Ну так на вскидку:
Код:
Func OHRInfoChange($IEObj, $KeysInfoArr)
	For $KeyNum = 1 To 1 ;UBound($KeysInfoArr, 2)-1
		$KeyObj = _IEGetObjById($IE, $KeysInfoArr[1][$KeyNum]) ; Переменная "$IE" у вас явно не объявлена, хотя в функцию вы ее передаете.
		TT('жмем')
		_IELinkClickByText($KeyObj, 'View/Edit') ; [Вот здесь оно и виснет]

		TT('ждем окно')
		WinWait('DIS - Add') ; Да нет, вот здесь оно виснет!
; ...

Ссылку на страницу можете дать?
 
Автор
V

vovsla

Осваивающий
Сообщения
607
Репутация
36
Ссылку дать не могу, это сегмент внутренней сети

Не хотелось бы полагаться на таймер.
Может можно через javascript запускать функцию SaveOEMOptionalInfo(2625005718218,'True') ?
И подозреваю что это можно сделать для объекта, что-то вроде нижеуказанного кода
Код:
$IEObject=_IEGetObjById($IEPage, $ID)
$IEObject.checked=True


Только не могу найти как вызвать функцию javascript из автоита
Нашел только вариант как из javascript вызвать функцию автоита http://autoit-script.ru/index.php?topic=15813.0


Добавлено:
Сообщение автоматически объединено:

Виснет именно там где я указал, вот скрин
http://hostingkartinok.com/show-image.php?id=457863a5ea804ae9c4c3dab0f924c7b9
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Vovsla [?]
Только не могу найти как вызвать функцию javascript из AutoIt'а

Код:
$sScript = "setTimeout('SaveOEMOptionalInfo(2625005718218, \'True\')', 1)"
browser_injectScript($oIe, $sScript)

Func browser_injectScript($oIe, $sScript)
	If Not IsObj($oIe) Then Return SetError(1, '1. $oIe не объект', False)
	Local $js = $oIe.document.createElement('script')
	$js.text = $sScript
	$js.defer = 'defer'
	$oIe.document.body.appendChild($js)
	$oIe.document.body.removeChild($js)
	Return True
EndFunc
 
Автор
V

vovsla

Осваивающий
Сообщения
607
Репутация
36
Во как, я думал что injectScript это инъекция своего скрипта.
Большое спасибо, работает
 
Автор
V

vovsla

Осваивающий
Сообщения
607
Репутация
36
Только теперь вопрос как работать с появившемся окном :smile:
После его открытия нельзя пользоваться отладчиком.
С помощью _IETagNameAllGetCollection не удалось получить хоть что-то касающееся появившегося окна, можно только в слепую посылать данные через ControlSend.
Может у кого-то есть идеи как можно работать с ним как с объектом?
 
Верх