Newbie, mein zweites Script: FF.au3; Sync von zwei Fenstern?, Click auf Button geht nicht

  • Hallo,

    da ich bei meinem ersten Script nicht so recht weitergekommen bin ?( , (dort ist das GUI wohl in einem XML versteckt und kann nicht durch AutoIt und FF.au3 interpretiert werden, siehe [ offen ] Newbie, mein erstes Script: Wie komme ich an den "Neu" Button? Firefox und FF.au3 )
    habe ich nun mal versucht, eine Nachricht über die AutoIt "Private Nachrichten" zu erstellen. Dies geht auch schon besser und ich lerne von Zeile zu Zeile dazu.

    Hier der Code des Skriptes:

    Spoiler anzeigen
    [autoit]


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

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

    $sUserName = "kkarsten62"
    $sPassWord = "**********"

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

    $sTo = "kkarsten62"
    $sSubject = "Mein zweites Script"
    $sBodyText = "Mein Bodytext"

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

    $Socket = _FFConnect()

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

    If $Socket > -1 Then
    _FFOpenURL($Socket, "http://www.autoit.de")
    _FFSetValueByName($Socket,"loginUsername", $sUserName)
    _FFSetValueByName($Socket,"loginPassword", $sPassWord)
    _FFFormSubmit($Socket)

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

    #cs
    In FF "Extras/Einstellungen.../Sicherheit/Passwörter speichern" mal zum Testen eingestellt
    um das Verhalten bei einem weiteren parallelen Fenster zu beobachten ...
    #ce
    If WinExists("Bestätigen") Then
    WinClose("Bestätigen") ; <== Wäre hier ein WinKill ggf. besser, schneller?
    ;MsgBox(0, "", "Window exists")
    Else
    ; MsgBox(0, "", "Window not exists")
    EndIf
    ; sleep(15000) ; hhmm, verstehe hier das Zusammenspiel der beiden Fenster nicht so recht ...
    _FFLoadWait($Socket, 15000, 25000) ; Warum muss hier ein delay von ~15 sec. sein?
    _FFClickLink($Socket, "http://www.autoit.de/index.php")
    _FFLoadWait($Socket, 0, 10000)

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

    _FFClickLink($Socket, "http://www.autoit.de/index.php?page=PMList")
    _FFLoadWait($Socket, 0, 10000)

    _FFClickLink($Socket, "http://www.autoit.de/index.php?form=PMNew")
    _FFLoadWait($Socket, 0, 10000)

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

    _FFSetValueByName($Socket, "recipients", $sTo)
    _FFSetValueByName($Socket, "subject", $sSubject)

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

    _FFClickLink($Socket, "Quellcode", "text") ; Klick auf Quellcode, sonst wird der Bodytext ignoriert, hhmm?!
    ; _FFClick($Socket, '.links[46]') ; Ändern sich eigentlich die indizes?, erst war es 48 dann 46, hmm ...?
    _FFSetValueByID($Socket, "mce_editor_0_codeview", $sBodyText)

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

    _FFSetGet($Socket, ".forms[3].elements[23].click()") ; als "Entwurf speichern", geht aber nicht?
    ; document.forms[3].elements[23].click() <== so sieht der Befehl in MozRepl aus und funktioniert dort! ...
    ; _FFClick($Socket, ".forms[3].elements[23]") ; Wie geht der "Entwurf speichern" Button zu betätigen, ist diese eine Alternative ?

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

    ; _FFLoadWait($Socket, 0, 10000)

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

    EndIf

    [/autoit]

    Zwei Sachen komme ich nicht so recht weiter:

    • Synchronisation von einem Popup Fenster und der FF-Seite. Zur Übung habe ich mal die FF Funktion "Extras/Einstellungen.../Sicherheit/Passwörter speichern" eingestellt. Nach dem Submit des Login erscheint dann ein Window um das Passwort zu verwalten. Es geht zwar, jedoch verstehe ich den Ablauf nicht so ganz. Zu dem ist das ganze recht langsam.
      Meine Frage ist nun: Wer ruf hier wen auf und warten dann auf wen?
    • Ich möchte die Nachricht abschliessend als Draft speichern. in MozRepl funktioniert der Befehl
      document.forms[3].elements[23].click()
      Wie sieht denn nun der Befehl in AutoIt aus? ich habe mehrere Varianten versucht, funktionieren aber alle nicht.

    Vielen Dank für eine Hilfe.
    kkarsten62

    Einmal editiert, zuletzt von kkarsten62 (10. August 2008 um 22:08)

  • Hallo,

    zu 1) das Problem kann ich gerade nicht nachvollziehen, da ich irgendwie den Dialog auf der Seite nicht mehr bekomme, kann einstellen was ich möchte ?(

    Zum 2) Dein Script macht bei mir hier genau das was es machen soll.

    Zu den Fragen im Script:
    Ja die Indizies können sich evtl. ändern. Was leider nicht sehr schön ist, wenn sich die Web-Designer nicht an die Vorschriften halten und weder Name noch ID bei Forms, angeben.

    Bei _FFLoadWait ergeben sich auf dieser Seite hier so lange Zeiten, da der Ladestatus manchmal ewig bei 97% hängt und es anscheinend nichts mehr passiert, deswegen gibt es nun bei _FFLoadWait einen zusätzlichen Parameter, bei dem man angeben kann, ab wieviel Prozent eine Seite als geladen gilt.

    _FFClick hätte eigentlich auch funktionieren sollen, aber per _FFSetGet geht es notfalls ja auch. Muß ich mir nochmal genauer ansehen

    Dein Script habe ich mal etwas überarbeitet:

    Spoiler anzeigen
    [autoit]

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

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

    $sUserName = "kkarsten62"
    $sPassWord = "*************"

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

    $sTo = "kkarsten62"
    $sSubject = "Mein zweites Script"
    $sBodyText = "Mein Bodytext"

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

    $Socket = _FFConnect()

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

    If $Socket > -1 Then
    ; Nachsehen ob autoit.de die atuelle Seite ist, wenn nicht dann laden.
    If Not StringInStr(_FFSetGEt($Socket,".location.href"),"autoit.de") Then _FFOpenURL($Socket, "http://www.autoit.de")

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

    ; Prüfen ob man nicht angemeldet ist
    If _FFAction($Socket, "search", "Du bist nicht angemeldet") Then
    _FFSetValueByName($Socket, "loginUsername", $sUserName)
    _FFSetValueByName($Socket, "loginPassword", $sPassWord)
    _FFFormSubmit($Socket)

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

    _FFLoadWait($Socket, 0, 10000, 95)

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

    EndIf

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

    ; wenn die Anmeldung geklappt hat
    If _FFAction($Socket, "search", "Angemeldet als") Then
    ; Ohne zu klicken die Formular-Seite öffnen
    _FFOpenURL($Socket, "http://www.autoit.de/index.php?form=PMNew")

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

    _FFSetValueByName($Socket, "recipients", $sTo)
    _FFSetValueByName($Socket, "subject", $sSubject)

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

    _FFClickLink($Socket, "Quellcode", "text") ; warum das hier sein muß, weis ich auch nicht

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

    _FFSetValueByID($Socket, "mce_editor_0_codeview", $sBodyText)

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

    _FFSetGet($Socket, ".forms[3].draft.click()")
    EndIf
    EndIf

    [/autoit]

    Grüße
    Stilgar

  • Hallo Stigar,

    vielen Dank für Deine Hilfe.

    Ich habe zunächst einmal die aktuelle FF.au3 V0.2.3.8 hergenommen wegen ==> - * NEU: _FFLoadWait: Optinaler Parameter nach wieviel Prozent ==> :thumbup:

    Jedoch bekomme - wie beim meinem Programm auch - den folgenden Fehler:

    Code
    _FFConnect: IP: 127.0.0.1
    _FFConnect: Port: 4242
    _FFConnect: Connection Delay: 6ms
    _FFConnect: Socket: 1732
    __FFSend: FF_AutoItScript.JavaScriptsInstalled
    __FFWaitForRepl ==> MozRepl Exception: @chrome://mozlab/content/mozrepl/repl.js -> file:///C:/Dokumente%20und%20Einstellungen/kkarsten62/Anwendungsdaten/Mozilla/Firefox/Profiles/2qa4y2jq.default/mozrepl.tmp.js:1
    
    
    !!! ReferenceError: FF_AutoItScript is not defined

    Ist ggf. etwas an meiner Installation nicht in Ordnung?

    Danke für eine Hilfe.

    kkarsten62

  • Bitte.

    Wenn die Meldung beim ersten Verbinden kommt, dann ist das normal, da die Variable FF_AutoItScript.JavaScriptsInstalled in FF dann noch nicht existiert. Über diese wird festgestellt ob schon mal eine Verbindung zustande kam und wenn nicht werden ein paar JavaScripte zu FF gesendet.

    Grüße
    Stilgar

  • Hallo Stilgar,

    es geht nun, jedoch habe ich meine Version für den "Entwurf speichern" Button hergenommen.

    [autoit]


    _FFSetGet($Socket, ".forms[3].elements[23].click()")

    [/autoit]

    Deine Version

    [autoit]


    _FFSetGet($Socket, ".forms[3].draft.click()") ; Version von Stilgar

    [/autoit]


    erzeugt
    !!! TypeError: content.frames.top.document.forms[3].draft has no properties

    Wie auch immer, ich denke, dass Thema ist damit gelöst.
    Vielen Dank und bis dahin.

    kkarsten62

  • Ja ich habe noch Version FF 2.0.0.16 und bin damit ganz zufrieden. Lohnt sich denn der Umstieg auf Version 3?

    kkarsten62

  • Lohnt sich nicht wirklich.

    Das einzig interessante und nützliche ist die neue Adressleiste, aber die Scroll-Geschwindigkeit auf machen Seiten ist von langsam in V2 auf unbenutzbar in V3 gesunken :(

    Außerdem ist es lästig FF zu 90% über den Taskmanager beenden zu müssen, scheint leider ein verbreitetes Problem zu sein.

    Grüße
    Stilgar