Schleife wird nicht wiederholt

  • Hallo.
    Ich hab folgendes Problem.

    Wenn ich dieses Script starte (is nur der wichtige Teilausschnitt), dann
    wird ein Link halt angeklickt, wenn der Counter = 2 ist. Danach geht der Browser wieder eine Seite zurück. Wenn der Wert nicht = 2 ist, dann refresht der Browser halt.
    Nun möcht ich aber, dass dann das ganze wiederholt wird. Deshalb hab ich die While Schleife drin. Aber ab dem zurückblättern, beendet das Script. Weis jmd warum ?

    Hoffe man versteht mich, habs nen bissl in Eile geschrieben.
    ps: Der Counter wurde im oberen Teil (hier nicht dabei) auf 0 gesetzt.

    Spoiler anzeigen
    [autoit]


    #include <IE.au3>
    $counter = 0

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

    $oIE=_IECreate("http://www.google.de",0,1)
    $oDocLinks = _IELinkGetCollection ($oIE); gibt links als Collection aus
    For $olink IN $oDocLinks
    if StringInStr ( $olink.outerText , "fro") Then ; der anzuklickende Link

    $zeit=Random(1000,5000,1)
    sleep($zeit) ; gibt zufallswert aus und Sleep übernimmt den Wert
    $olink.click() ; der Klick auf den Link
    EndIf
    Next

    _IELoadWait($oIE)

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

    run("reconnect.exe") ; ip erneuern
    sleep("10000")

    _IEAction($oIE,"back") ; Browser geht eine Seite zurück

    While 1

    _IELoadWait($oIE) ; warten bis Seite geladen

    $counter=$counter+1 ; der Counter wird 1 erhöht

    if $counter=2 Then ; Counter größer, gleich 16 dann klickt er auf den Link
    $oDocLinks = _IELinkGetCollection ($oIE); gibt links als Collection aus

    For $olink IN $oDocLinks
    if StringInStr ( $olink.outerText , "fro") Then ;der anzuklickende Link
    $zeit=Random(20235, 30595 , 1)
    sleep($zeit) ; gibt zufallswert aus und Sleep übernimmt den Wert
    $olink.click() ; der Klick auf den Link
    _IELoadWait($oIE) ; warten bis Seite geladen
    run("reconnect.exe")
    sleep("10000")
    _IEAction($oIE,"back") ; Browser geht eine Seite zurück
    $counter=$counter-2
    EndIf
    Next


    ElseIf $counter<2 Then ; counter unter 16 dann refresht er
    $zeit=Random(16478, 25205, 1)
    sleep($zeit) ; gibt zufallswert aus und Sleep übernimmt den Wert
    _IEAction($oIE,"refresh")
    run("reconnect.exe")
    sleep("10000")


    EndIf

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

    WEnd

    [/autoit]

    3 Mal editiert, zuletzt von Vaniax (12. Januar 2007 um 22:56)

  • hallo!

    probiers bitte mal so:

    [autoit]

    While 1

    _IELoadWait($oIE) ; warten bis Seite geladen

    $counter=$counter+1 ; der Counter wird 1 erhöht

    if $counter=2 Then ; Counter größer, gleich 16 dann klickt er auf den Link
    $oDocLinks = _IELinkGetCollection ($oIE); gibt links als Collection aus


    For $olink IN $oDocLinks
    if StringInStr ( $olink.outerText , "fro") Then ;der anzuklickende Link
    $zeit=Random(20235, 30595 , 1)
    sleep($zeit) ; gibt zufallswert aus und Sleep übernimmt den Wert
    $olink.click() ; der Klick auf den Link
    _IELoadWait($oIE) ; warten bis Seite geladen
    run("reconnect.exe")
    sleep("10000")
    _IEAction($oIE,"back") ; Browser geht eine Seite zurück
    $counter=$counter-2
    EndIf
    Next


    Else ; $counter<2 Then ; counter unter 16 dann refresht er
    $zeit=Random(16478, 25205, 1)
    sleep($zeit) ; gibt zufallswert aus und Sleep übernimmt den Wert
    _IEAction($oIE,"refresh")
    run("reconnect.exe")
    sleep("10000")


    EndIf

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

    WEnd

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

    hoffe es funtzt!

  • Ne, das Script beendet sich immer noch nach dem er auf den Link gegklickt hat und zurück gegangen ist.

    Außerdem hab ich noch das Problem, dass die Zeit nicht wirklich
    Zufall ist. Er wartet immer fast genau 30 sec bis zum Klick, obwohl ich ja werte von 20235ms und 30595 angeben hab. Und das is immer so, die Zeit verändert sich gar nicht. Hab ich da was falsch gemacht?

  • Weis keiner Rat?

    Hab oben nochmal kompletten Code reingesetzt.
    Ich find einfach keinen Fehler, ganzen Tag rumprobiert

    • Offizieller Beitrag

    Ich denke es liegt daran das die Schleifen (For $olink IN $oDocLinks) nach dem Klick nicht beendet werden und so auf Elemente zugreifen die nicht mehr existieren.

    Probiers mal so, ich habe an den entsprechenden Stellen ein Exitloop eingebaut:

    Spoiler anzeigen
    [autoit]

    #include <IE.au3>
    $counter = 0

    $oIE=_IECreate("http://www.google.de",0,1)
    $oDocLinks = _IELinkGetCollection ($oIE); gibt links als Collection aus

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

    For $olink IN $oDocLinks
    if StringInStr ( $olink.outerText , "fro") Then ; der anzuklickende Link
    $zeit=Random(1000,5000,1)
    sleep($zeit) ; gibt zufallswert aus und Sleep übernimmt den Wert
    $olink.click() ; der Klick auf den Link
    ExitLoop
    EndIf
    Next

    _IELoadWait($oIE)

    run("reconnect.exe") ; ip erneuern
    sleep("10000")

    _IEAction($oIE,"back") ; Browser geht eine Seite zurück

    While 1

    _IELoadWait($oIE) ; warten bis Seite geladen

    $counter=$counter+1 ; der Counter wird 1 erhöht

    if $counter=2 Then ; Counter größer, gleich 16 dann klickt er auf den Link
    $oDocLinks = _IELinkGetCollection ($oIE); gibt links als Collection aus

    For $olink IN $oDocLinks
    if StringInStr ( $olink.outerText , "fro") Then ;der anzuklickende Link
    $zeit=Random(20235, 30595 , 1)
    sleep($zeit) ; gibt zufallswert aus und Sleep übernimmt den Wert
    $olink.click() ; der Klick auf den Link
    _IELoadWait($oIE) ; warten bis Seite geladen
    run("reconnect.exe")
    sleep("10000")
    _IEAction($oIE,"back") ; Browser geht eine Seite zurück
    $counter=$counter-2
    ExitLoop
    EndIf
    Next

    ElseIf $counter<2 Then ; counter unter 16 dann refresht er
    $zeit=Random(16478, 25205, 1)
    sleep($zeit) ; gibt zufallswert aus und Sleep übernimmt den Wert
    _IEAction($oIE,"refresh")
    run("reconnect.exe")
    sleep("10000")

    EndIf

    WEnd

    [/autoit]

    Wenn es dann immer noch nicht funktioniert kann es an den run("reconnect.exe") liegen. Diese Zeilen dann erst mal auskommentieren und noch mal probieren!