Что нового

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

Minek

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

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

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

Yashied

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

CreatoR

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

Minek

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

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,624
Репутация
2,443
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
Репутация
157
Minek
а если работать с ie окном в скрытом виде?
 
Автор
M

Minek

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