While-Schleife funktioniert nicht richtig

  • Hey,

    ich habe mir ein Script erstellt, das für mich gewisse Aktionen auf einer Website ausführen soll.
    Ich hatte es immer mit sleep() gemacht, doch da die Website immer unterschiedlich lange zum laden braucht dauert es entweder sehr lange bis alles durchgeloffen ist, oder ich stelle die zeit zu kurz ein und es bricht ab.
    Bei der Website wird das bild immer kurz schwarz wenn es lädt und dann wird der hintergrund an der stelle x=5 y=135 wieder weiß.
    Mein Script soll dies berücksichtigen und erst nachdem dies eingetreten ist weiterarbeiten. Leider funktioniert es nicht richtig :( , aber vielleicht weiß ja jemand von euch weiter :)

    das hier ist ein Teil von meinem Script:
    ...

    [autoit]


    #Include <sg.au3>
    If $t=0 Then Sleep(500)
    MouseClick("primary", 800, 815 )
    Exit

    [/autoit]


    ...
    und sg.au3 beinhaltet den abschnitt, welcher sozusagen die pause während dem laden darstellt:
    ...

    [autoit]


    $t=1
    While $t=1
    sleep(5)
    $var = PixelGetColor(5,135)
    If $var=0 Then $t=2
    Exit
    WEnd
    While $t=2
    sleep(5)
    $var = PixelGetColor(5,135)
    If $var=16777215 Then $t=0
    Exit
    WEnd

    [/autoit]


    ...

    Was mache ich falsch? ?(

    sg.au3 sollte übrigens mehrmals funktionieren, deshalb will ich vor dem Ausführen $t immer wieder auf 1 setzen.

    Lg Pago

  • Hm, ich dachte durch das include wäre es so, als würde der text direkt da stehen? Wie rufe ich denn die Funktion auf?

    Ich brauch den Abschnitt im Folgenden noch öfters, deshalb habe ich das mit include gemacht. Aber ohne das include, also wenn ich es direkt reingeschrieben habe, dann geht es auch nicht.

    Muss ich das Exit nicht da stehen lassen? ansonsten ist die funktion doch fehlerhaft??

    Ich dachte die While Schleife unterbricht das ganze Script, bis die beiden Schleifen durchgeloffen sind. Bei der ersten Schleife soll es testen, ob das Bild an der Stelle schwarz ist. Wenn es das wird, dann soll Schleife zwei starten und so lange testen, bis es wieder weiß an dieser Stelle ist. Er danach soll das Hauptscript weiterarbeiten.

    Edit: Ich glaube ich habe das Problem gelöst, ich muss aber noch schauen ob es so wie ich es mache öfters funktioniert oder nur einmal.

    [autoit]


    #Include <sg.au3>
    While $t=0
    Sleep(100)
    MouseMove(1015, 175 )
    MouseDown("left")
    MouseMove(1015, 230 )
    MouseUp("left")
    MouseClick(675, 685 )
    $t=1
    WEnd

    [/autoit]

    sg.au3:

    [autoit]


    $t=1
    While $t=1
    sleep(5)
    $var = PixelGetColor(5,135)
    If $var=0 Then $t=2
    WEnd
    While $t=2
    sleep(5)
    $var = PixelGetColor(5,135)
    If $var=16777215 Then $t=0
    WEnd

    [/autoit]

    Lg Pago

    Einmal editiert, zuletzt von Pagolothas (15. Mai 2011 um 11:34)

  • Wenn du einen Code-Teil öfter aufrufen willst, empfehle ich dir, ihn in eine Funktion zu schreiben.
    Die kannst du dann beliebig oft ausführen

    [autoit]

    _WaitforPicture()
    Sleep(100)
    MouseMove(1015, 175 )
    MouseDown("left")
    MouseMove(1015, 230 )
    MouseUp("left")
    MouseClick(675, 685 )

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

    Func _WaitforPicture()
    Do
    sleep(40)
    $var = PixelGetColor(5,135)
    Until $var = 0
    Do
    sleep(40)
    $var = PixelGetColor(5,135)
    Until $var=16777215
    EndFunc

    [/autoit]

    MfG,
    Fresapore