Что нового

Обработка ошибок работы скрипта.

Minek

Чайник
Сообщения
10
Репутация
0
Написал скрипт, управляющий лазаньем в инете интернет эксплорера. Использую комманды библиотеки ie.au3 - _IELinkClickByiNDEX, _IEBodyReadText, IEImgClick. Однако при работе скрипта регулярно выскакивают ошибки типа той, что на картинке во вложении, и скрипт прекращает работу.

Скорее всего они вылезают из за неуспевания инета за моими командами - так как используя большие задержки после каждого действия, скрипт отрабатывает нормально. Возможно ли как обрабатывать эти ошибки средствами Autoit, а не вываливаться? На обработчик я бы повесил команду поспать миллисекунд 300 и повторить.

PS: Не смотрите, что Autoit beta. Со stable все то же самое.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 702
Выложи свой скрипт (или его часть), так будет всем проще понять эту проблему.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 160
Репутация
2 329
Minek
Это ошибки COM-объектов, они мониторятся при пощи ObjEvent (см. справку).
Хотя в случае с _IE* используется функция _IEErrorHandlerRegister.
 
Автор
M

Minek

Чайник
Сообщения
10
Репутация
0
После добавления в программу примера из хелпа к _IEErrorHandlerRegister все ошибки чудесным образом исчезли. :blink: Но меня это устраивает. 8)
Спасибо.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 160
Репутация
2 329
Minek [?]
все ошибки чудесным образом исчезли
Далее их можно отслеживать:

Код:
_IEErrorHandlerRegister("_Error_Handler")

;тут тело скрипта

Func _Error_Handler()
    ; Important: the error object variable MUST be named $oIEErrorHandler
    $ErrorScriptline = $oIEErrorHandler.scriptline
    $ErrorNumber = $oIEErrorHandler.number
    $ErrorNumberHex = Hex($oIEErrorHandler.number, 8)
    $ErrorDescription = StringStripWS($oIEErrorHandler.description, 2)
    $ErrorWinDescription = StringStripWS($oIEErrorHandler.WinDescription, 2)
    $ErrorSource = $oIEErrorHandler.Source
    $ErrorHelpFile = $oIEErrorHandler.HelpFile
    $ErrorHelpContext = $oIEErrorHandler.HelpContext
    $ErrorLastDllError = $oIEErrorHandler.LastDllError
    $ErrorOutput = ""
    $ErrorOutput &= "--> COM Error Encountered in " & @ScriptName & @CR
    $ErrorOutput &= "----> $ErrorScriptline = " & $ErrorScriptline & @CR
    $ErrorOutput &= "----> $ErrorNumberHex = " & $ErrorNumberHex & @CR
    $ErrorOutput &= "----> $ErrorNumber = " & $ErrorNumber & @CR
    $ErrorOutput &= "----> $ErrorWinDescription = " & $ErrorWinDescription & @CR
    $ErrorOutput &= "----> $ErrorDescription = " & $ErrorDescription & @CR
    $ErrorOutput &= "----> $ErrorSource = " & $ErrorSource & @CR
    $ErrorOutput &= "----> $ErrorHelpFile = " & $ErrorHelpFile & @CR
    $ErrorOutput &= "----> $ErrorHelpContext = " & $ErrorHelpContext & @CR
    $ErrorOutput &= "----> $ErrorLastDllError = " & $ErrorLastDllError
    
	MsgBox(0, "COM Error", $ErrorOutput)
    Return SetError(1)
EndFunc
 
Автор
M

Minek

Чайник
Сообщения
10
Репутация
0
Разобрался с ошибками. Для сложных страниц нужно проверять загрузку не основной страницы, а фреймов, к которым обращаешься. :-[
Так и сделал, как в примере, и функцию определил.
Теперь другая проблема - окошко IE при работе скрипта постоянно переключает на себя фокус. Как бы его задвинуть на задний план и что б оно там и сидело?
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
156
Minek
а если работать с ie окном в скрытом виде?
 
Автор
M

Minek

Чайник
Сообщения
10
Репутация
0
Если окошку IE присвоить статус Hide, то эксплорер прячется, скрипт работает. Но хотелось бы краем глаза видеть, что там происходит.
 
Верх