Что нового

Проблема с запуском скрипта на Microsoft Windows Server 2012 R2 Standard

uritalex

Новичок
Сообщения
197
Репутация
3
Добрый день! Может кто сталкивался с такой проблемой? Приобрел VPS на одном из сервисов там установлена виртуалка с Microsoft Windows Server 2012 R2 Standard и 11 IE. Суть проблемы такая что часть команд скрипта выполняется, а часть нет:( как правило (то что смог отследить) не выполняются команды с таким кодом
Код:
$oEl.class = "lined_tit" 
и
$oEl.lastChild.previousSibling.innerText
и
 If $oEl.classname 
и 
innertext

И другие подобные команды
Кто сталкивался с таким и как можно это решить?
 
Автор
U

uritalex

Новичок
Сообщения
197
Репутация
3
Сам скрипт, после долгих мытарств и проб с новыми версиями, сделан на 3.3.12.х т.к. пробовал обновиться до 3.3.14.х так половина скриптов с ошибками повыпадала :( на самой виртуатке запускал как ехе так и с редактора. На виртуалке ставил и 3.3.14 и 3.3.12. Дело в том что скрипт в ехе нормально работает на 7-ке как обычной так и на 64. В чем прикол не могу понять.

При чем при запуске через редактор он просто в определенном месте зависает и все. Не показывает ошибок или чего то еще :( при остановке пишет стандартно как при завершении скрипта :(
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
В новых (3.3.14.0 и выше) при любых ошибках работы с объектами, autoit выбрасывает исключение, и что бы ваш скрипт не падал, нужно это исключение обрабатывать, для этого всегда существовала и существует функция ObjEvent('AutoIt.Error', '.....'). Но если раньше такие исключения не вызывали завершения скрипта, то теперь разрабы решили иначе, конечно не понятно какая муха их укусила. Почему у вас половина скриптов не заработала - потому что все написаны не правильно. Таких свойств у объектов нет: class, classname, innertext, а есть className, innerText.
 
Автор
U

uritalex

Новичок
Сообщения
197
Репутация
3
Так в том то и дело что я менял и ставил и так class, classname, innertext и так className, innerText результат один :(

Более того эта
Код:
_IELoadWait ($oIE)
функция выдает ошибку и валит скрипт :(
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Значит туда куда вы ставили не являлось объектом или не обладала этим свойством.
 
Автор
U

uritalex

Новичок
Сообщения
197
Репутация
3
Возможно ли вам предоставить скрипт чтоб Вы его посмотрели? Просто там учетные данные, не очень их бы хотелось в паблик кидать :smile:
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Нет, времени нет :D и нет Microsoft Windows Server 2012 R2 Standard
 
Автор
U

uritalex

Новичок
Сообщения
197
Репутация
3
OffTopic:
:'( эх жаль


А еще и такое вылазит
Код:
--> IE.au3 T3.0-1 Error from function _IECreate,  (Browser Object Creation Failed)
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
uritalex [?]
А еще и такое вылазит Код: [Выделить]
Код:
--> IE.au3 T3.0-1 Error from function _IECreate,  (Browser Object Creation Failed)
Предыдущий не закрылся. Я никогда не пользуюсь _IECreate из за этого бага. Вот 100% работающая функция.
Код:
Func _IE_Private2()
	Local $url = 'about:' & Random()
;~ 	Local $pid = Run(@ProgramFilesDir & "\Internet Explorer\iexplore.exe -noframemerging -private " & $url)
	;или
	Local $pid = ShellExecute("iexplore.exe", "-noframemerging -private " & $url)
	If @error Then Return SetError(1, @error, False)
	Local $win = WinWait("[CLASS:IEFrame]", $url, 30)
	For $oie In ObjCreate("Shell.Application").Windows()
		If $win = HWnd($oie.hwnd) Then Return SetExtended($pid, $oie)
	Next
	If $pid Then ProcessClose($pid)
	Return SetError(2, @error, False)
EndFunc   ;==>_IE_Private
 
Автор
U

uritalex

Новичок
Сообщения
197
Репутация
3
:shok: ого за это отдельное спасибо :laugh: :IL_AutoIt_1:


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

К стати не отрабатывает эти комбинации из темы : http://autoit-script.ru/index.php?topic=20588.0 хотя на 7-ке работают
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
inververs [?]
Вот 100% работающая функция.
Я использовал подобную функцию, но она часто возвращает ошибку, если уже открыто одно или несколько окон IE. Заменил в ней WinWait() на
Код:
;~ ...
$a_IE_List = WinList('[CLASS:IEFrame]')
$i_Count = $a_IE_List[0][0]
$i_Timer = TimerInit()
Do
	Sleep(50)
	$a_IE_List = WinList('[CLASS:IEFrame]')
	If TimerDiff($i_Timer) > 30000 Then ExitLoop
Until $i_Count <> $a_IE_List[0][0]
For $o_IE In ObjCreate('Shell.Application').Windows()
	If WinGetProcess(HWnd($o_IE.hwnd)) = $i_PID Then Return SetExtended($i_PID, $o_IE)
Next
;~ ...
и функция стала гораздо надежнее.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
madmasles врядли именно эту. Весь смысл, что там в окне уникальный текст Local $url = 'about:' & Random() и WinWait("[CLASS:IEFrame]", $url, 30) найдет только это окно. И хоть там 100 окон уже открыто до этого
 
Автор
U

uritalex

Новичок
Сообщения
197
Репутация
3
Вот что дает при исполнении команд

Код:
$oElems = _IETagNameGetCollection($oIE, "div")
For $oEl In $oElems
    If $oEl.className = "lined_tit" Then

Код:
For $oEl In $oElems
For $oEl In $oElems^ ERROR
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
inververs [?]
врядли именно эту
Не обратил внимание, что у Вас в WinWait() используется текст. Наверное, Вы правы, у меня создавались абсолютно одинаковые окна IE.
uritalex [?]
Вот что дает при исполнении команд
Научитесь уже проверять значение, которое возвращает функция или флаг @error.
 
Автор
U

uritalex

Новичок
Сообщения
197
Репутация
3
В том что и дело что при проверке, вернее дополнительной проверки загрузки страницы реализованной следующим образом

Код:
Do
   Sleep (500)
Until _UrlGet ("адрес") = 1


Func _UrlGet ($Url)
     If _IEPropertyGet($oIE, "LocationURL") = $Url Then Return 1
EndFunc

Возвращает это:
Код:
--> IE.au3 T3.0-1 Error from function _IEPropertyGet, $_IESTATUS_InvalidObjectType
Хотя страница с указанным адресом отображается и загружена


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

Все Всем спасибо !!!! :laugh: Разобрался скрипт пошел дальше :IL_AutoIt_1:
 
Верх