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 !
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...
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]Jetzt wäre es natürlich nützlich wenn wir auch dein Script sehen könnten...
Kein Problem:
[autoit]#include <IE.au3>
[/autoit][autoit][/autoit][autoit]_IELoadWaitTimeout(100)
$IE = _IECreate('http://192.168.4.8/4534', 0,1)
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:
Zitatwenn 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?
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.
Dafür gibt es _IEErrorHandlerRegister():
#include <IE.au3>
_IEErrorHandlerRegister("MyErrFunc")
_IELoadWaitTimeout(100)
$oIE = _IECreate('http://192.168.4.8/4534', 0,1)
sleep(10000)
Func MyErrFunc()
; Important: the error object variable MUST be named $oIEErrorHandler
Local $ErrorScriptline = $oIEErrorHandler.scriptline
Local $ErrorNumber = $oIEErrorHandler.number
Local $ErrorNumberHex = Hex($oIEErrorHandler.number,
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
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?
Wieso soll das nicht funktionieren?
Klappt bei mir einwandfrei:
#include <IE.au3>
_IEErrorHandlerRegister("MyErrFunc")
_IELoadWaitTimeout(100)
$oIE = _IECreate('http://192.168.4.8/4534', 0,1)
sleep(5000)
_IEQuit($oIE)
MsgBox(0, '', 'Beenden')
Func MyErrFunc()
; Important: the error object variable MUST be named $oIEErrorHandler
Local $ErrorScriptline = $oIEErrorHandler.scriptline
Local $ErrorNumber = $oIEErrorHandler.number
Local $ErrorNumberHex = Hex($oIEErrorHandler.number,
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
Das funktioniert. Was nicht klappt ist, dass _IEQuit($oIE) durchgeführt wird am Ende der Funktion, sprich dann, wenn diese "greift".
Das darf auch nicht in der Funktion stehen. Du musst ggf. im Hauptprogramm auf @error prüfen und dann _IEQuit ausführen.