AutoItSkript zum Testen von Websitenladezeiten

  • Hallo

    Ich habe den Auftrag bekommen die Ladezeiten von unseren Intranetseiten zu messen und habe bei euch folgenden Skript gefunden:


    [autoit]

    Const $runs = 5
    Const $url = "www.Testseite.de"
    #include <IE.au3>
    $oIE = _IECreate("about:blank", 1, 1, 1, 1)
    $sum = 0
    For $i = 1 To $runs
    $time = TimerInit()
    _IENavigate($oIE, $url, 1)
    $sum += TimerDiff($time)
    Next
    MsgBox(0, "Durchschnittliche Ladezeit", "Durchschnittliche Ladezeit ("& $runs &" Läufe): " & StringFormat("%.2f", $sum /$runs / 1000) & " Sekunden")

    [/autoit]

    Dummerweise liefert der Skript für Internetseiten realistische Ergebnisse aus, aber Intranetseiten liefern 0,01Sekunden zurück und man sieht die Seite weiterladen.

    Jemand eine Idee woran das liegen könnte?

    Wäre euch sehr dankbar

    2 Mal editiert, zuletzt von EgoArmee (21. Juni 2012 um 09:56)

  • _IeNavigate() übermittelt dem internet Explorer nur die URL und wartet nicht.Probier es mal, nach _IeNavigate() noch _IELoadWait() einzufügen, dann sollte dein Script pausieren, bis die Seite fertig geladen ist


    Laut Hilfe wartet _IeNavigate wenn wie im Beispielskript der Wait-Patameter nicht auf 0 gesetzt ist. Ein Versuch mit _IELoadWait kann nicht schaden. Falls dies nicht klappt teste einmal dieses Skript:

    Spoiler anzeigen
    [autoit]

    Const $runs = 5
    Const $url = "http://www.lima-city.de/"
    #include <IE.au3>
    _IEErrorHandlerRegister()
    $oIE = _IECreate("about:blank", 1, 1, 1, 1)
    Sleep(1000)
    $SinkObject = ObjEvent($oIE, "IEEvent_", "DWebBrowserEvents2") ; Ereignisse den UDFs zuweisen, beginnend mit IEEvent_$sum = 0
    $sum = 0

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

    For $i = 1 To $runs
    $time = TimerInit()
    _IENavigate($oIE, $url, 0) ;wartet nicht
    $bLoaded = False
    $bStarted = False
    $percent = 0
    $oldPer = 999
    Do
    Sleep(100)
    $sText = _IEPropertyGet($oIE, "statustext")
    ConsoleWrite($sText & @CRLF)
    If StringInStr($sText, "auf") Then $bStarted = True
    If $bStarted Then
    If StringInStr($sText, "Fertig") Then $bLoaded = True
    Sleep(100)
    $sText = _IEPropertyGet($oIE, "statustext")
    ConsoleWrite("2 " & $sText & @CRLF)
    If StringInStr($sText, "wird") Then $bLoaded = False
    EndIf
    Until $bLoaded
    $sum += TimerDiff($time)
    Next
    MsgBox(0, "Durchschnittliche Ladezeit", "Durchschnittliche Ladezeit (" & $runs & " Läufe): " & StringFormat("%.2f", $sum / $runs / 1000) & " Sekunden")

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

    Func IEEvent_ProgressChange($Progress, $ProgressMax)
    $percent = Int(($Progress * 100) / $ProgressMax)
    EndFunc ;==>IEEvent_ProgressChange

    [/autoit]

    mfg autoBert

  • Bei letsgos Tipp

    [autoit]

    Const $runs = 5
    Const $url = "http://moss.emea.ksb.intern/English/Ressorts/SalesAndMarketing/Pages/default.aspx"
    #include <IE.au3>
    $oIE = _IECreate("about:blank", 1, 1, 1, 1)
    $sum = 0
    For $i = 1 To $runs
    $time = TimerInit()
    _IENavigate($oIE, $url, 1)
    _IELoadWait($oIE)
    $sum += TimerDiff($time)
    Next
    MsgBox(0, "Durchschnittliche Ladezeit", "Durchschnittliche Ladezeit ("& $runs &" Läufe): " & StringFormat("%.2f", $sum /$runs / 1000) & " Sekunden")

    [/autoit]


    Habe ich genau das gleiche Problem wie bei dem Urprungscode: Internetseiten geben normale Ergebnisse, Intranetseiten liefern sofort ein Ergebnis aber man sieht die Website weiterladen

    Bei autoberts Vorschlag öffnet er sowohl im Intranet als auch im Internet einfach nur die Seite und nichts passiert, in der Taskleiste wird aber noch angezeigt das ein Skript laufen würde

    Einmal editiert, zuletzt von EgoArmee (21. Juni 2012 um 10:10)

  • Die Fehlermeldung bedeutet, dass _IELoadWait einen Parameter erwartet.
    Was da hingehört, wird in der AutoIt Hilfe erklärt.
    Da steht auch ein Beispiel drin.

    [autoit]


    _IELoadWait($oIE)

    [/autoit]

    Wer andern eine Bratwurst brät
    der hat ein Bratwurstbratgerät.

  • Wäre es moglich, dass beim Intranet die Daten blitzschnell geladen sind,
    aber der IE ziemlich lang braucht, um die Seite anzuzeigen ?

    Wer andern eine Bratwurst brät
    der hat ein Bratwurstbratgerät.

  • Hallo EgoArmee,

    ich habe mein Skript noch einmal überarbeitet, teste alsobitte einmal dieses:

    Spoiler anzeigen
    [autoit]

    Const $runs = 1
    Const $url = "www.lima-city.de/"
    #include <IE.au3>
    _IEErrorHandlerRegister()
    $oIE = _IECreate("about:blank", 1, 1, 1, 1)
    Sleep(1000)
    If Not _IEPropertyGet ($oIE, "statusbar") Then _IEPropertySet ($oIE, "statusbar", True)
    $SinkObject = ObjEvent($oIE, "IEEvent_", "DWebBrowserEvents2") ; Ereignisse den UDFs zuweisen, beginnend mit IEEvent_$sum = 0
    $sum = 0
    $percent = 0
    For $i = 1 To $runs
    $time = TimerInit()
    _IENavigate($oIE, $url, 0) ;wartet nicht
    $bLoaded = False
    $bStarted = False
    $percent = 0
    $oldPer = 999
    $sOldText =''
    Do
    Sleep(100)
    $sText = _IEPropertyGet($oIE, "statustext")
    if $sText <> $sOldText Then ConsoleWrite($sText & @CRLF)
    $sOldText = $sText
    If StringInStr($sText, "auf") Then $bStarted = True
    If $bStarted Then
    If StringInStr($sText, "Fertig") Then $bLoaded = True
    Sleep(100)
    $sText = _IEPropertyGet($oIE, "statustext")
    ;ConsoleWrite("2 " & $sText & @CRLF)
    If StringInStr($sText, "wird") Then $bLoaded = False
    EndIf
    Until $bLoaded
    $sum += TimerDiff($time)
    Next
    MsgBox(0, "Durchschnittliche Ladezeit", "Durchschnittliche Ladezeit (" & $runs & " Läufe): " & StringFormat("%.2f", $sum / $runs / 1000) & " Sekunden")

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

    Func IEEvent_ProgressChange($Progress, $ProgressMax)
    $percent = Int(($Progress * 100) / $ProgressMax)
    EndFunc ;==>IEEvent_ProgressChange

    [/autoit]

    Lass es bitte einmal im Original dirchlaufen und poste danach die Konsolenausgabe, bei mir sieht si so aus:

    mfg autoBert

  • Das selbe Problem wie bei deinem alten Skript:
    Es passiert einfach nichts. Die Seite öffnet sich zwar, in der Taskbar sieht man den Skript aber das wars.
    Bin deinen alten Skript mal durchgegangen und habe gemerkt das ab einer bestimmten Zeile nichts mehr ausgeführt wird

    [autoit]

    Const $runs = 5
    Const $url = "http://www.spiegel.de"
    #include <IE.au3>
    _IEErrorHandlerRegister()
    $oIE = _IECreate("about:blank", 1, 1, 1, 1)
    $SinkObject = ObjEvent($oIE, "IEEvent_", "DWebBrowserEvents2") ; Ereignisse den UDFs zuweisen, beginnend mit IEEvent_$sum = 0
    $sum = 0

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

    For $i = 1 To $runs
    $time = TimerInit()
    _IENavigate($oIE, $url, 0) ;wartet nicht
    $bLoaded = False
    $bStarted = False
    $percent = 0
    $oldPer = 999
    Do
    $sText = _IEPropertyGet($oIE, "statustext")
    ConsoleWrite($sText & @CRLF)
    If StringInStr($sText, "auf") Then $bStarted = True
    If $bStarted Then
    ;-----------------------------------------------------------------------------------------------------
    Exit
    If StringInStr($sText, "Fertig") Then $bLoaded = True
    Sleep(100)
    $sText = _IEPropertyGet($oIE, "statustext")
    ConsoleWrite("2 " & $sText & @CRLF)
    If StringInStr($sText, "wird") Then $bLoaded = False
    EndIf
    Until $bLoaded
    $sum += TimerDiff($time)
    Next
    MsgBox(0, "Durchschnittliche Ladezeit", "Durchschnittliche Ladezeit (" & $runs & " Läufe): " & StringFormat("%.2f", $sum / $runs / 1000) & " Sekunden")

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

    Func IEEvent_ProgressChange($Progress, $ProgressMax)
    $percent = Int(($Progress * 100) / $ProgressMax)
    EndFunc ;==>IEEvent_ProgressChange

    [/autoit]


    Bei diesem und auch bei deinem neuen Skript wird nach

    [autoit]

    If $bStarted Then

    [/autoit]

    nichts mehr ausgeführt

    3 Mal editiert, zuletzt von EgoArmee (22. Juni 2012 um 10:41)

  • Ich hab ja kaum Ahnung vom heutigen IE, bin eher der Firefox "nightly" Typ, aber...

    [autoit]


    $sText = _IEPropertyGet($oIE, "statustext")

    [/autoit]


    Wird da etwa die Statuszeile abgefragt ? Gibts bei meinem IE (0.0.8112.16412 64-bit) nämlich nicht mehr.
    Vieleicht läuft das Script, wenn man neben den Tab klickt und dort "Status Bar" aktiviert (ist US English bei mir).
    Allerdings lese ich da nichts von "auf" oder "fertig"... mir scheint das Script, bei allem Respekt, etwas unzuverlässig.
    Da wird wohl eine Statusmeldung gelesen, die nicht unbedingt existiert.

    Wer andern eine Bratwurst brät
    der hat ein Bratwurstbratgerät.

  • poste danach die Konsolenausgabe

    Ich gehe davon aus das Exit hast du eingefügt um festzustellen ob jemals diese If bedingung erfüllt ist. Da sie es offensichtlich nicht ist scheint deine ersion die IExplorers andere Statusmeldungen aus zu geben als meiner (IE 8 ). Da das Skript aber auf die Statusmeldungen reagiert muss es auf die Meldungen deiner Version angepasst werden. Meine 2. Version unterscheidet sich von der 1. darin dass:

    • die Statusbar unbedingt angezeigt wird
    • nur beim Wechseln der Meldung diese protokoliert wird

    mfg autoBert

    2 Mal editiert, zuletzt von autoBert (22. Juni 2012 um 11:38)

  • Das Exit ist da drinnen um zu prüfen wo der Skript aufhört zu funktionieren.
    Welche Version des IE hast du AutoBert bzw was muss ich ändern um es auf unsere Version anzupassen?
    Ich hab 9.0.8112.16421 32 BIT

    Edit: Die Frage ist jetzt wie man das im Internet Explorer 9 abfragt, die Statusbar hab ich anzeigen lassen, bekomme aber immernoch das gleiche Problem

    3 Mal editiert, zuletzt von EgoArmee (22. Juni 2012 um 11:42)

  • Welche Konsolenausgabe denn überhaupt?
    Wenn sich da einen öffnen soll, dann funktioniert das auch nicht bei mir erscheint keine Konsole

  • Wenn du zB mit dem Scite Editor arbeitest, und dann dein script ausführst (F5-Taste) dann siehst du unten ein Output, das ist die Konsolenausgabe...


  • Das kommt
    Ein wenig Recherche hat ergeben das die IE.au3 veraltet ist und diesen ganzen Commands im IE9 garnicht funktionieren .
    ICh bräuchte also ne aktuelle IE.au3 für IE9 und die finde ich nicht

    2 Mal editiert, zuletzt von EgoArmee (22. Juni 2012 um 14:14)

  • Alternative Methode:

    [autoit]


    Local $begin = TimerInit()
    $seite=inetRead ("http://www.spiegel.de",1)
    MsgBox(0,"Ergebnis","Länge: " & StringLen($seite) / 1024 & " KB geladen mit "& (StringLen($seite)/1024) / (TimerDiff($begin) / 1000) & " KB/s")

    [/autoit]

    Wer andern eine Bratwurst brät
    der hat ein Bratwurstbratgerät.

  • Problem vorerst halbwegs gelöst

    [autoit]

    $begin = TimerInit()
    InetRead ("wwww.test.de",1)
    $dif = TimerDiff($begin)
    MsgBox(0,"Zeitunterschied",$dif)

    [/autoit]


    Fehlt zwar die Verarbeitungszeit bis IE das anzeigt aber die ist vernachlässigbar
    Das beste wäre AutoBerts Skript irgendwie für IE9 zum laufen zu kriegen

    Einmal editiert, zuletzt von EgoArmee (22. Juni 2012 um 16:00)