Bestimmte Seite x-mal besuchen

  • Hey!
    Ich habe ein Problem mit meinem aktuellen Skript.
    Und zwar möchtte ich das eine vorher eingegebene Seite eine festgelegte Anzahl oft besucht wird.
    Hier ein Auszug aus dem Code:

    [autoit]


    Global $scr_start, $count

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

    $count = "0"
    $visit_counter = "0"

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

    Func _stop_scr()
    [?]
    EndFunc

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

    Func _start()
    For $count = "0" To GUICtrlRead($fld_number) Step 1
    _IECreate(GUICtrlRead($fld_adress), 0, 0, 1)
    $visit_counter += 1
    GUICtrlSetData($fld_counter, $visit_counter)
    Next
    EndFunc

    [/autoit]

    Es wird bei dem Druck auf einen Button die Funktion _start_scr() ausgeführt und anschließend die Funktion _start().
    Dadurch soll das Aufrufen der Seite beginnen. Die Seite soll eine bestimmte Anzahl oft aufgerufen werden (GUICtrlRead($fld_number)).
    Wie oft die Seite schon aufgerufen wurde, soll in ein geschlossenes Input-Feld geschrieben werden (GUICtrlSetData($fld_counter, $visit_counter + "1")).
    Danach eine Sekunde gewartet werden und die Seite insgesamt so oft aufgerufen werden, wie der Wert von $fld_number ist.

    Das Problem hierbei ist es, dass das ganze nur einmal funktioniert, danach hängt sich das Skript auf.
    Ich hoffe ihr könnt mir hierbei helfen!
    Vielen Dank schon einmal für eure Hilfe!

    Gruß,
    Korby

    P.S.: Die IE.au3 habe ich natürlich auch eingebunden. ;)

    7 Mal editiert, zuletzt von Korby (6. Juni 2008 um 14:04)

  • Ganz versteht ich dein Skript nicht, was möglicherweise daran liegt, dass du nur einen Teil gepostet hast. Ein paar Anmerkungen habe ich schon:

    Du hast eine For-Schleife, welche die Seitenaufrufe wiederholt. Aber wozu die While-Schleife? Soll die komplette For-Schleife mehrmals ausgeführt werden? Wenn Nein, dann lösche die While-Schleife. (Willst du die For-Schleife vorzeitig verlassen, dann geht das mit ExitLoop .)

    Welchen Wert hat $visit_counter? Du solltest vor Beginn der For-Schleife einen Startwert festlegen: $visit_counter = 0 . Ansonsten kannst du nichts addieren.
    Es bringt nichts, jedesmal in der GUICtrlSetData-Funktion $visit_counter + 1 zu addieren, denn dann bleibt $visit_counter immer gleich.
    Bevor du GUICtrlSetData ausführst, solltest du $visit_counter um eins erhöhen: $visit_counter += 1 . Es kommt auf das += an!

    2 Mal editiert, zuletzt von daign (5. Juni 2008 um 18:00)

  • Danke für deine Hilfe, habe einen Teil des Skriptes falsch wiedergegeben, habe es jetzt korrigiert und deine Vorschläge eingebracht.
    Hast du denn eine Idee warum es nach einmaligem Ausführen abbricht / sich aufhängt?

  • Ich habe mal so eine ähnliches Programm geschrieben.
    Meins funktionierte so, dass du eine URL eingeben musst, danach musst du die Anzahl der Aufrufe eingeben und dann läuft das Programm los.
    Jedoch ist mein Programm nur für den Firefox und außerdem habe ich keine Fehlerüberprüfung eingebaut.

    Hier der Code:

    Spoiler anzeigen
    [autoit]


    #include <FF.au3>
    #include <GUIConstants.au3>

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

    $GUI = GUICreate("Homepageviewer", 320, 120)
    GUICtrlCreateLabel("Bitte geben Sie eine URL ein: ", 10, 10)
    GUICtrlCreateLabel("Bitte die Wiederholungen eingeben: ", 10, 50)
    $URL = GUICtrlCreateInput("", 10, 25, 300)
    $Wiederholungen = GUICtrlCreateInput("", 10, 65, 300)
    $StartenButton = GUICtrlCreateButton("Starten", 10, 90, 100)
    $BeendenButton = GUICtrlCreateButton("Beenden", 110, 90, 100)

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

    GUISetState(@SW_SHOW)

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

    While 1
    $Msg = GUIGetMsg()
    Switch $Msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $BeendenButton
    Exit
    Case $StartenButton
    $Socket = _FFStart(GUICtrlRead($URL))
    If $Socket <> -1 Then
    For $i=1 To GUICtrlRead($Wiederholungen)
    _FFAction($Socket, "Reload")
    Next
    MsgBox(64, "Info", "Fertig")
    Else
    MsgBox(64, "Info", "Fehler")
    EndIf
    EndSwitch
    WEnd

    [/autoit]

    Ich hoffe ich konnte helfen. ;)

  • Danke!
    Habe aber vorher noch eine Frage.
    Wie beende ich den laufenden Loop denn mit ExitLoop?
    Wenn ich $visit_counter mit += 1 erhöhe wird nicht aber nicht das Label (in dem die aktuelle Zahl angezeigt werden soll) aktualisiert.
    Eine Idee?

    EDIT:
    Danke für deine Hilfe morfi93, doch soll das Fenster 1. versteckt ausgeführt werden, also bei dem Vorgang nicht sichtbar sein und 2. die Anzahl der bereits durchgeführten Wiederholungen in einem Label anzeigen.

  • du musst eine variable erstellen und darin die anzahl der bisherigen wiederholungen speichern und dann in der for schleife $count += 1 schreiben und danach mit guictrlsetdata($Label3,$count) das laben aktualisieren.

  • Alles klar, danke!
    Hat alles funktioniert.
    Das Skript funktioniert jetzt einwandfrei, doch wie kann ich es pausieren, sprich beenden?

  • willst du es beenden nachdem eine bestimmte anzahl von seitenaufrufen erreicht ist oder wann?

  • dann müssstest du mal dein skript code posten damit ich dir weiter helfen kann. ;)

  • Der wichtigste Teil ist ja schon gepostet.
    Ich brauche nur Hilfe bei der Funktion "_stop_scr".
    Damit der For-Part vorzeitig beendet werden kann, gibt es da eine einfache Lösung?

  • Aufbauend auf dem obigen Script evtl. so ähnlich:

    Spoiler anzeigen
    [autoit]

    #region Includes
    #include <FF.au3>
    #include <GUIConstantsEx.au3>
    #endregion Includes

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

    HotKeySet("{ESC}", "Terminate")

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

    $GUI = GUICreate("Homepageviewer", 320, 120)
    GUICtrlCreateLabel("Bitte geben Sie eine URL ein: ", 10, 10)
    GUICtrlCreateLabel("Bitte die Wiederholungen eingeben: ", 10, 50)
    $URL = GUICtrlCreateInput("", 10, 25, 300)
    $Wiederholungen = GUICtrlCreateInput("", 10, 65, 250)
    $count = GUICtrlCreateInput("", 270, 65, 40)
    $StartenButton = GUICtrlCreateButton("Starten", 10, 90, 100)
    $BeendenButton = GUICtrlCreateButton("Beenden", 110, 90, 100)

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

    GUISetState(@SW_SHOW)

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

    While 1
    $Msg = GUIGetMsg()

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

    Switch $Msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $BeendenButton
    Exit
    Case $StartenButton
    $Ende = GUICtrlRead($Wiederholungen)
    $Socket = _FFStart(GUICtrlRead($URL))
    If $Socket <> -1 Then
    For $i=1 To $Ende
    GUICtrlSetData($count,$i)
    _FFAction($Socket, "Reload" ,"LOAD_FLAGS_BYPASS_CACHE")
    _FFLoadWait($Socket)
    Next
    MsgBox(64, "Info", "Fertig")
    Else
    MsgBox(64, "Info", "Fehler")
    EndIf
    EndSwitch
    WEnd

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

    Func Terminate()
    MsgBox(64, "Info", "Abbruch")
    $i = $Ende
    EndFunc

    [/autoit]

    Grüße
    Stilgar

  • Du verstehst anscheinend mein Problem nicht...
    Wenn ich es z.B. mit dem HotKey F8 lösen möchte, würde der Anfang ja so aussehen:

    [autoit]


    HotKeySet("{F8}", "_stop_scr")

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

    Func _stop_scr()
    ; Hier die Funktion, die ich wissen möchte
    EndFunc

    [/autoit]

    Wie kann ich damit die For-Schleife beenden?

    EDIT:
    Danke für deine Hilfe Stilgar, doch möchte ich nicht, dass sich das Skript beendet, sondern nur die For-Schleife beendet wird.

  • Hast du es denn schon ausprobiert???

    Die Schleife wird dadurch beendet, das in der Hotkey-Funktion der Schleifenzähler auf die Anzahl der Wiederholungen gesetzt wird, dadurch wird die Schleife beendet.

  • Habe es mit deiner Methode gerade noch einmal ausprobiert, das Skript beendet nicht einmal, bevor die For-Schleife nicht ausgeführt wurde.

  • Es weis nicht genau was du nun meinst, hier funktioniert es so:

    ESC unterbricht die Schleife
    Beenden macht das Fenster zu

    Evtl. mit Wartezeit, falls die Seite noch nicht geladen wurde.

    Die Wartezeit die entsteht, kommt von dem _FFLoadWait, das darauf wartet, daß die Seite vollständig gelanden ist.Du kannst dies evtl durch ein Sleep(1000) ersetzen, dann ist aber nicht garantiert, daß die Seite neu geladen wurde.

  • Hast du es schon ausprobiert? Es funktioniert bei meinem Skript keine der von dir genannten Methoden.