Hallo zusammen,
ich suche eine möglichkeit einem IE Fenster zu sagen, wenn du in 5 sec nicht komplett geladen bist dann mache schliesse dich.
Hat einer nen Tip wie ich das machen kann?
Danke und Gruß
Norman
Hallo zusammen,
ich suche eine möglichkeit einem IE Fenster zu sagen, wenn du in 5 sec nicht komplett geladen bist dann mache schliesse dich.
Hat einer nen Tip wie ich das machen kann?
Danke und Gruß
Norman
Hallo Norman Bates,
ich habe mein "Embedded Web control Test" Beispiel darauf angepasst:
#cs ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]AutoIt Version: 3.3.6.1
Author: AutoBert: http://www.autoit.de/index.php?page…4679#post164679
Skriptbeispiel für den Umgang mit _IECreateEmbedded, _IEErrorHandlerRegister, _IENavigate, _IEAction GuiCtrlCreateProgress, _IEPropertyGet
#ce ----------------------------------------------------------------------------
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>
_IEErrorHandlerRegister()
[/autoit] [autoit][/autoit] [autoit]$oIE = _IECreateEmbedded()
$SinkObject = ObjEvent($oIE, "IEEvent_", "DWebBrowserEvents2") ; Ereignisse den UDFs zuweisen, beginnend mit IEEvent_
GUICreate("Embedded Web control Test", 640, 600, _
(@DesktopWidth - 640) / 2, (@DesktopHeight - 580) / 2, _
$WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
$hInput = GUICtrlCreateInput("Hier URL eingeben: ", 10, 10, 500)
$hGo = GUICtrlCreateButton("&Go", 520, 10, 50)
$GUIActiveX = GUICtrlCreateObj($oIE, 0, 40, 640, 480)
;$GUIActiveX = GUICtrlCreateObj($oIE, 0, 40, 683, 480) ;wenn der vertikale Skrollbalken nicht zu sehen sein soll
GUICtrlSetResizing($GUIActiveX, $GUI_DOCKAUTO)
$GUI_Button_Back = GUICtrlCreateButton("Back", 10, 525, 100, 22)
GUICtrlSetResizing(-1, $GUI_DOCKSTATEBAR)
$GUI_Button_Forward = GUICtrlCreateButton("Forward", 120, 525, 100, 22)
GUICtrlSetResizing(-1, $GUI_DOCKSTATEBAR)
$GUI_Button_Home = GUICtrlCreateButton("Home", 230, 525, 100, 22)
GUICtrlSetResizing(-1, $GUI_DOCKSTATEBAR)
$GUI_Button_Stop = GUICtrlCreateButton("Stop", 340, 525, 100, 22)
GUICtrlSetResizing(-1, $GUI_DOCKSTATEBAR)
$GUI_Button_Print = GUICtrlCreateButton("PRINT", 450, 525, 100, 22)
GUICtrlSetResizing(-1, $GUI_DOCKSTATEBAR)
$idProgress = GUICtrlCreateProgress(0, 555, 640, 18)
GUICtrlSetResizing(-1, $GUI_DOCKSTATEBAR)
GUISetState() ;Show GUI
$iTime=TimerInit()
_IENavigate($oIE, "http://www.autoit.de/index.php?page=Thread&postID=164679#post164679")
; Waiting for user to close the window
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $hGo
_IENavigate($oIE, GUICtrlRead($hInput))
Case $msg = $GUI_Button_Home
_IENavigate($oIE, "http://www.autoitscript.com")
Case $msg = $GUI_Button_Back
_IEAction($oIE, "back")
Case $msg = $GUI_Button_Forward
_IEAction($oIE, "forward")
Case $msg = $GUI_Button_Stop
_IEAction($oIE, "stop")
Case $msg = $GUI_Button_Print
_IEAction($oIE, "print")
EndSelect
$surl1 = _IEPropertyGet($oIE, "locationurl")
$surl2 = GUICtrlRead($hInput)
; ConsoleWrite($surl1 & " " & $surl2 & " " & GUICtrlRead($idProgress) & @CRLF)
If $surl1 <> $surl2 And GUICtrlRead($idProgress) > 90 Then GUICtrlSetData($hInput, $surl1)
WEnd
$SinkObject = 0 ; IE Eventzuweisung aufheben
_IEQuit($oIE)
GUIDelete()
Exit
Func IEEvent_ProgressChange($Progress, $ProgressMax)
if TimerDiff($iTime)>5000 Then
_IEAction($oIE,"stop")
;Exit
EndIf
$percent = Int(($Progress * 100) / $ProgressMax)
If $percent >= 0 And $percent <= 100 Then GUICtrlSetData($idProgress, $percent)
EndFunc ;==>IEEvent_ProgressChange
wichtig ist Zeile 15 und die damit aufgerufene Func: IEEvent_ProgressChange
mfg autoBert
Danke werde es direkt mal testen
Habe mir das Script mal ausgeführt.
Verstehe nicht was die Func mit der Zeile 15 zu tun hat und wie diese funktioniert.
Kannst Du mir diese erklären?
Danke und Gruß
Norman
Das kann die Hilfe zu
[autoit]ObjEvent
[/autoit]besser. Ich habe damals auch nur die benötigten Zeilen aus der Hilfe herauskopiert und bei mir angepasst auf eine Progressbar eingesetzt.
mfg autoBert
Ich brauche hier bitte nochmal eure Hilfe.
Habe mir in der Hilfe mal ObjEvent angeguckt und ein Code ausschnitt ausprobiert wo ich dachte dass das doch eigentlich funktionieren müsste.
[autoit]If $oIE.readyState = "complete" Or $oIE.readyState = 4 Then ExitLoop
[/autoit]Das habe ich dann wie folgt eingesetzt mit hilfe eines Scripts aus dem Englischen Forum.
[autoit]Dim $oIE = _IECreate()
[/autoit][autoit][/autoit][autoit]ObjEvent($oIE,"IEEvent_","DWebBrowserEvents2")
_IENavigate($oIE, "www.34jk5h4j3k5hj3453.com",0)
Sleep(10000)
If not $oIE.readyState = "complete" Or $oIE.readyState = 4 Then
_IEQuit($oIE)
ConsoleWrite("Nicht geladen" &@CRLF)
Exit
Else
_IEQuit($oIE)
ConsoleWrite("Seite komplett geladen" &@CRLF)
EndIf
Func IEEvent_NavigateError($pdisp, $url, $tf, $status,$cancel)
$msg = "Problems loading page: " & $url & @CRLF
$msg = $msg & "Status: " & $status & @CRLF
MsgBox(0,"PROBLEMS",$msg)
EndFunc
Egal ob die Seite geladen ist oder nicht er springt direkt zu Else Anweisung.
Vllt hat ja noch der eine oder andere ne Idee.
Danke und Gruß
Norman
Kann dein Problem bestätigen, ich bekomme immer "Seite komplett geladen". Ist aber auch logisch da der Readystate 4 für komplett geladen steht, deine If Bedinung muss also so aussehen:
[autoit]If Not $oIE.readyState = "complete" and Not $oIE.readyState = 4 Then
ConsoleWrite("Nicht geladen" & @CRLF)
Else
ConsoleWrite("Seite komplett geladen" & @CRLF)
EndIf
_IEQuit($oIE)
Exit
mfg autoBert
Danke für Deine Antwort.
Funktioniert das bei Dir?
Bei mir nach wie vor nicht.
Habe mal ein Screenshot drangehangen wie die Seite aussieht wenn er die Else Anweisung ausführt.
[Blockierte Grafik: http://www.abload.de/thumb/bildhdkqf.jpg]
Gruß
Norman
Lass mal dieses Skript unverändert laufen:
#include <IE.au3>
[/autoit] [autoit][/autoit] [autoit]Dim $oIE = _IECreate()
ObjEvent($oIE, "IEEvent_", "DWebBrowserEvents2")
$bTimeOut = False
$iTimeOut=900000 ;bitte mindestenst 1 mal mit diesem Wert durchlaufen lassen danach 1 mal mit 10 dies sollte beide Varianten zeigen
$iTime=TimerInit()
$sURL = "www.autoit.de"
_IENavigate($oIE, $sURL, 0)
If $oIE.readyState <> "Vor While...Wend: complete" and $oIE.readyState <> 4 Then
ConsoleWrite("Nicht geladen" & @CRLF)
Else
ConsoleWrite("Vor While...Wend: Seite komplett geladen" & @CRLF)
EndIf
While Not $bTimeOut And $oIE.readyState <> 4
Sleep(1000)
WEnd
If $oIE.readyState <> "Nach While...Wend: complete" and $oIE.readyState <> 4 Then
ConsoleWrite("Nicht geladen" & @CRLF)
Else
ConsoleWrite("Nach While...Wend: Seite komplett geladen" & @CRLF)
EndIf
If $bTimeOut Then
ConsoleWrite(@CRLF&@CRLF&'Seite: ' & $sURL&' nicht in '&$iTime &' ms geladen!'&@CRLF)
Else
ConsoleWrite(@CRLF&@CRLF&'Seite: ' & $sURL&' in '&$iTime &' ms geladen!'&@CRLF)
EndIf;_IEQuit($oIE)
;_IEQuit($oIE)
Exit
Func IEEvent_NavigateError($pdisp, $url, $tf, $status, $cancel)
$msg = "Problems loading page: " & $url & @CRLF
$msg = $msg & "Status: " & $status & @CRLF
MsgBox(0, "PROBLEMS", $msg)
EndFunc ;==>IEEvent_NavigateError
Func IEEvent_ProgressChange($Progress, $ProgressMax)
Local $iDiff=TimerDiff($iTime)
;ConsoleWrite($Progress & '/' & $ProgressMax &@TAB& $oIE.readyState & ' bisher: ' &$iDiff & @CRLF)
If TimerDiff($iTime) > $iTimeOut Then
If $oIE.readyState <> 4 Then $bTimeOut = True
$iTime=TimerDiff($iTime)
;_IEAction($oIE,"stop")
;Exit
EndIf
EndFunc ;==>IEEvent_ProgressChange
nach dem 1. Durchlauf änderst du $iTimeOut auf einen extrem kleinen Wert. Speichere dir beidesmal die Consolenausgaben in ein Textfile, falls du weitere Nachfragen hast möchte ich sie sehen.
mfg autoBert
DANKE.
Funktioniert Super.
Könntest Du für die jenigen die diesen Beitrag finden weil sie auch dieses Problem haben und natürlich für mich noch die IF Anweisung kommentieren?
Danke und Gruß
Norman