Fehler bei IE.au3 abfangen

  • Hallo zusammen,

    wie fangt ihr Eure Fehler bei der IE.au3 ab, wenn z.B. eine Seite nicht läd (IENavigate)? IELoadWait? Da stürzt mein Skript leider immer ab.

    Danke !

  • Du könntest einfach einen Ping an die Seite senden, bevor du sie aufrufst... Aber eigentlich müsste es in der IE-UDF eine Funktion/Parameter geben, mit dessen Hilfe sich ein Timeout für die Antwort des Servers setzen lässt... ;)

    LG
    Christoph :)

  • Z.B. mit IELoadWaitTimeout. Leider stürzt mein Skript dann ab, wenn dieser Fall eintrifft:

    [autoit]

    C:\Programme\AutoIt3\Include\ie.au3 (561) : ==> The requested action with this object has failed.:

    [/autoit]
  • Kein Problem:

    [autoit]

    #include <IE.au3>

    [/autoit][autoit][/autoit][autoit]

    _IELoadWaitTimeout(100)
    $IE = _IECreate('http://192.168.4.8/4534', 0,1)

    [/autoit][autoit][/autoit][autoit]

    sleep(10000)

    [/autoit]

    Aufruf sollte bei Euch auch zum Skriptabbruch führen mit der o.g. Fehlermeldung.

  • Ich zitiere mich ja nur ungern selbst aber ich sagte doch folgendes:

    Zitat

    wenn wir auch dein Script sehen könnten

    Bitte poste doch dein eigentliches Script, damit wir dir bei deinem konkreten Problem in deinem Script helfen können... Warum möchtest du es denn nicht zeigen?

    LG
    Christoph :)

  • Das ist mein Skript, weil ich genau darin die Fehler-Abfang-Geschichte getestet habe, sie aber nicht klappt. Die Google-Suche nach der Fehlermeldung führt mich nur zu einer französischen Autoit-Webseite.

    • Offizieller Beitrag

    Dafür gibt es _IEErrorHandlerRegister():

    Spoiler anzeigen
    [autoit]


    #include <IE.au3>
    _IEErrorHandlerRegister("MyErrFunc")
    _IELoadWaitTimeout(100)
    $oIE = _IECreate('http://192.168.4.8/4534', 0,1)
    sleep(10000)

    [/autoit] [autoit][/autoit] [autoit]

    Func MyErrFunc()
    ; Important: the error object variable MUST be named $oIEErrorHandler
    Local $ErrorScriptline = $oIEErrorHandler.scriptline
    Local $ErrorNumber = $oIEErrorHandler.number
    Local $ErrorNumberHex = Hex($oIEErrorHandler.number, 8)
    Local $ErrorDescription = StringStripWS($oIEErrorHandler.description, 2)
    Local $ErrorWinDescription = StringStripWS($oIEErrorHandler.WinDescription, 2)
    Local $ErrorSource = $oIEErrorHandler.Source
    Local $ErrorHelpFile = $oIEErrorHandler.HelpFile
    Local $ErrorHelpContext = $oIEErrorHandler.HelpContext
    Local $ErrorLastDllError = $oIEErrorHandler.LastDllError
    Local $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)
    SetError(1)
    Return
    EndFunc ;==>MyErrFunc

    [/autoit]
  • Spitze, das habe ich gebraucht. Danke. Damit kann man sich dann schön ne Logfile-Ausgabe basteln.

    Problem ist nur, dass hier IEQuit nicht mehr funktioniert. Ist das bekannt oder mache ich etwas falsch?

    • Offizieller Beitrag

    Wieso soll das nicht funktionieren?
    Klappt bei mir einwandfrei:

    Spoiler anzeigen
    [autoit]


    #include <IE.au3>
    _IEErrorHandlerRegister("MyErrFunc")
    _IELoadWaitTimeout(100)
    $oIE = _IECreate('http://192.168.4.8/4534', 0,1)
    sleep(5000)
    _IEQuit($oIE)
    MsgBox(0, '', 'Beenden')

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func MyErrFunc()
    ; Important: the error object variable MUST be named $oIEErrorHandler
    Local $ErrorScriptline = $oIEErrorHandler.scriptline
    Local $ErrorNumber = $oIEErrorHandler.number
    Local $ErrorNumberHex = Hex($oIEErrorHandler.number, 8)
    Local $ErrorDescription = StringStripWS($oIEErrorHandler.description, 2)
    Local $ErrorWinDescription = StringStripWS($oIEErrorHandler.WinDescription, 2)
    Local $ErrorSource = $oIEErrorHandler.Source
    Local $ErrorHelpFile = $oIEErrorHandler.HelpFile
    Local $ErrorHelpContext = $oIEErrorHandler.HelpContext
    Local $ErrorLastDllError = $oIEErrorHandler.LastDllError
    Local $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)
    SetError(1)
    Return
    EndFunc ;==>MyErrFunc

    [/autoit]