Moin moin Leute,
ich hab da mal ein recht exotisches Problem.
Vorweg: Dieses Problem tritt bei mir nur in VMs auf, welche in ESXi oder im VMware Player 6.0.4 laufen.
Reale Hardware und in Virtual Box sind nicht von diesem Fehler betroffen.
OS: Windows 7 (32 und 64bit), Windows 8.1, Windows 10, Windows Server 2012
Die Sprache macht keinen Unterschied.
Es ist auch egal ob das System frisch Installiert ist (zuletzt getestet mit Windows 7) oder ob es schon eine Zeit läuft.
UAC und Sicherheitsoptionen des IE machen ebenfalls keinen Unterschied.
AutoIT: Getestet mit 3.3.8.1 und 3.3.14.1
Problem: In dem angehängten Beispielskript wird ein IE gestartet, Maximiert und anschließend zwei Websiten (nacheinander) aufgerufen. Bei dieser Website sucht er nach einem Searchtext -> Gefunden: MsgBox mit Quellcode der Seite | Nicht gefunden: Neuer Schleifendurchlauf bis Timeout (5sek) durch.
In diesem Beispiel sucht er erst nach USA auf aldi.de, anschließend bei bing.de nach Bing.
Bing.de wird nicht abgeschlossen. Hier bekomme ich jedesmal den Quellcode von Aldi.de, zusätzlich ist der ReadyStatus auf 1.
Setz ich Google als erste Seite, dann geht es.
Zusätzliches Problem:
Ich kann leider kein _IELoadWait nutzen, weil diese Funktion mehrfach gecrashed ist. Meine Vermutung ist, da er den IE am Ende auch nicht mehr schließt, dass das Objekt vom IE irgendwo/wann im Hintergrund verändert wird.
Hat hier einer eine Idee, was das Problem sein könnte?
Lösungsvorschläge?
Known Bug?
DAU und es ist ein ganz einfacher Fehler?
Mal gucken, vielleicht habt ihr eine Idee.
Danke euch
Mfg
"Beispielscript"
#region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseX64=n
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
;~ #AutoIt3Wrapper_Res_requestedExecutionLevel=highesAvailable
;~ #AutoIt3Wrapper_Res_requestedExecutionLevel=requireAdministrator
#endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <IE.au3>
$oIE = _IECreate("about:blank", 0, 1, 0, 1)
$temp = WinWait("[CLASS:IEFrame]", "", 30)
WinActivate($temp)
; Maximize the Internet Explorer window.
WinSetState($temp, "", @SW_MAXIMIZE)
_n("http://www.aldi.de/")
_IEReady(0, "USA", $oIE, 5)
Sleep(4000)
_n("www.bing.de")
_IEReady(0, "Bing", $oIE, 5)
_IEQuit($oIE)
Func _IEReady($ier_id, $ier_searchtext, $ier_handler, $ier_timeout = 20)
Local $ier_current_runtime = TimerInit()
Local $ier_time_delta = 0
If Not (IsNumber($ier_timeout) == 1) Then
; If the timeout is no number (Integer or Float) set a default value
$ier_timeout = 20
EndIf
;DEV
Local $ie_readystate
Do
$ie_readystate = _IEPropertyGet($ier_handler, "readystate")
$ier_time_delta = TimerDiff($ier_current_runtime)
_p(StringFormat("Timer: %s - Readystate: %s", $ier_time_delta, $ie_readystate))
Until $ie_readystate >= 1 Or ($ier_time_delta >= $ier_timeout * 1000)
;DEV
Local $ier_clipboard = ""
Local $ier_fail = True
Do
$ier_clipboard = ""
; Gets the source code of the website
$ier_clipboard = _IEDocReadHTML($ier_handler)
; Gets the readystate of the website
$ie_readystate = _IEPropertyGet($ier_handler, "readystate")
$ier_time_delta = TimerDiff($ier_current_runtime)
_p(StringFormat("Timer: %s - Readystate: %s || (Write HTML into Error Log)", $ier_time_delta, $ie_readystate))
_p($ier_clipboard) ;DEV
; Checks if the searchtext is in the source code
If StringInStr($ier_clipboard, $ier_searchtext, 0) <> 0 Then
; Searchtext is in the Source code. Print a measage (MsgBox)
$ier_fail = False
_m($ier_clipboard)
Else
; No match
$ier_fail = True
EndIf
$ier_time_delta = TimerDiff($ier_current_runtime)
Sleep(125) ;DEV
Until ($ier_fail == False) Or ($ier_time_delta >= $ier_timeout * 1000)
If $ier_fail = False Then
; String Found
_p(StringFormat("Website Test: String %s found on Website", $ier_searchtext))
Return True
Else
; String not found
_p(StringFormat("Website Test: could not find string: %s", $ier_searchtext))
Return False
EndIf
EndFunc ;==>_IEReady
Func _p($m)
ConsoleWrite($m & @CRLF)
EndFunc ;==>_p
Func _m($m)
MsgBox(0, "", "String Found " & $m)
EndFunc ;==>_m
Func _n($m)
_p(_IENavigate($oIE, $m, 0))
Sleep(500)
EndFunc ;==>_n
Alles anzeigen