Frage zu _FFCmd_Err

  • Huhu! Bin noch relativ neu und hoffe das ich das so nu alles richtig Poste hier! :rofl:

    Habe folgendes Script geschrieben:

    #include <WinHTTP.au3>
    #include <FF.au3>

    Func Ende ()
    While 1
    Exit
    WEnd
    EndFunc

    Hotkeyset("{F6}","Ende")

    $email = "E-Mail@Provider.de"
    $password = "123456"

    _FFStart("http://homepage.de/")
    _FFLoadWait()

    If _FFConnect(Default, Default, 3000) Then
    sleep(5000)
    _FFSetValue($email, "email", "Class")
    _FFSetValue($password, "password", "Class")
    _FFClick("button green s widthXxs", "class", 0)
    Else
    MsgBox(64, "", "Can't connect to FireFox!")
    EndIf

    html-quelltext:

    <form method="post" action="/account/login">
    <p>
    <input class="email" type="text" placeholder="E-Mail" name="email"></input>
    <input class="password" type="password" placeholder="Passwort" name="password"></input>
    </p>
    </form>

    Das Script funktioniert soweit, allerdings wird mir folgendes ausgegeben:

    Spoiler anzeigen

    >"...\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "...\Test.au3"
    __FFStartProcess: ""C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -new-window "http://homepage.de" -repl 4242
    _FFConnect: OS: WIN_7 WIN32_NT 7600
    _FFConnect: AutoIt: 3.3.8.1
    _FFConnect: FF.au3: 0.6.0.1b-3
    _FFConnect: IP: 127.0.0.1
    _FFConnect: Port: 4242
    _FFConnect: Delay: 2ms
    _FFConnect: Socket: 620
    _FFConnect: Browser: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0
    __FFSendJavaScripts: Sending functions to FireFox .......... done
    _FFLoadWait: . loaded in 10ms
    _FFLoadWait: . loaded in 10ms
    _FFConnect: OS: WIN_7 WIN32_NT 7600
    _FFConnect: AutoIt: 3.3.8.1
    _FFConnect: FF.au3: 0.6.0.1b-3
    _FFConnect: IP: 127.0.0.1
    _FFConnect: Port: 4242
    _FFConnect: Delay: 2ms
    _FFConnect: Socket: 636
    _FFConnect: Browser: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0
    __FFSendJavaScripts: Sending functions to FireFox .......... done
    __FFSend: try{window.content.top.document.getElementsByClassName('email')[0].value='E-Mail@Provider.de'}catch(e){'_FFCmd_Err';};
    __FFRecv: E-Mail@Provider.de
    __FFSend: try{window.content.top.document.getElementsByClassName('password')[0].value='123456'}catch(e){'_FFCmd_Err';};
    __FFRecv: 123456
    __FFSend: try{FFau3.simulateEvent(FFau3.WCD.getElementsByClassName('button green s widthXxs')[0],'MouseEvents','click');}catch(e){'_FFCmd_Err';};
    __FFRecv: 1
    _FFLoadWait: .... loaded in 790ms
    >Exit code: 0 Time: 11.571

    Hab nun die Frage, ob die Ausgabe von "_FFCmd_Err" als Fehler zu werten ist, oder ob diese Ausgabe Standart / normal ist?!
    Davon ab gilt die selbe Frage auch für "ErrorStdOut".

    Und da ich gerade so schön dabei war und farbig markiert habe, um das ganze noch übersichtlicher zu gestalten ist mir auch direkt noch eine weitere Frage eingefallen. Und zwar habe ich mit _FFLoadWait() und sleep(5000) ein wenig gespielt und konnte kaum eine Veränderung wahrnehmen. Meine Frage von daher wäre, ob und wann diese Funktionen ins besondere bei meinem Script, so wie es gerade ist, nötig wären bzw. Sinn machen.

    Einmal editiert, zuletzt von Chulio (29. Dezember 2013 um 23:05)

  • Unabhängig von Deiner Frage, kann ich Dir einen Tipp zum Verfassen von Beiträgen im Forum geben: Verwende die Autoit- bzw. Quellcode-Tags, um Dir aufwendige Formatierungsarbeiten zu ersparen.
    Die entsprechenden Schaltflächen finden sich (beim Verfassen eines neuen Beitrages) in der Quellcode-Ansicht unterhalb der "Schriftgröße"-Option horizontal aufgelistet.

  • Hallo,

    wenn das Script so aussieht:

    [autoit]

    _FFStart()

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

    If _FFConnect() Then
    _FFOpenURL("http://homepage.de/")
    _FFSetValue($email, "email", "Class")
    _FFSetValue($password, "password", "Class")
    _FFClick("button green s widthXxs", "class", 0)
    Else
    MsgBox(64, "", "Can't connect to FireFox!")
    EndIf

    [/autoit]

    dann braucht man alle Sleeps und _FFLoadWait nicht mehr, denn _FFOpenURL beinhaltet _FFLoadWait.
    Auch _FFClick sollte durch ein einfaches _FFFormSubmit() ersetzt werden können - kommt auf die Seite an.

    Die Zeilen mit:

    Code
    __FFSend: try{window.content.top.document.getElementsByClassName('password')[0].value='123456'}catch(e){'_FFCmd_Err';};


    sind ein JavaScript-Code der im Fehlerfall "'_FFCmd_Err" zurückgibt, bei Deiner Consolen-Ausgabe war alles in Ordnung, also werden die passenden Meldungen für den Erfolgsfall zurückgeliefert:
    _FFClick -> 1
    _FFSetValue -> der gesendete Wert

    Grüße
    Stilgar

  • Zunächst einmal dankeschön für die Information. ;)

    "Auch _FFClick sollte durch ein einfaches _FFFormSubmit() ersetzt werden können - kommt auf die Seite an."

    Die Tatsache das du sagst "ein einfaches" lässt mich erahnen, das ein FFFormSubmit in diesem Falle, sofern möglich schneller/besser wäre. Hab ich das so richtig verstanden. Ich meine funktionieren wird denke ich beides. Allerdings geht es mir im eigentlichen nicht darum etwas Spezielles zum laufen zu bekommen.
    Im endeffekt bastel ich gerade eher so herum, um ein wenig mehr Verständnis für AutoIt zu entwickeln.


    Weitere Fragen die sich mir noch gerade stellen, wo ich jetzt nicht unbedingt extra Threads für aufmachen wollte, da ich nichtmal so genau wüsste, wie ich den Topic nennen sollte....auser vllt "dumme Anfängerfragen", was nahezu nichts aussagend wäre...

    Und zwar würde mich mal interessieren, was ich da eigentlich programmiere. Ich kenne zb php halbwegs. Damit lassen sich eigentlich auch schon recht viele Dinge realisieren (auch in Verbindung mit mysql-Datenbanken ganz nett). Was mir aufgefallen ist und warum sich mir die Frage stellt was ich hier programmiere ist relativ simpel...extrem viele Dinge sind dann doch sehr änlich mit php.
    Ist AutoIt eine "eigene Sprache" oder greift AutoIt im Eigentlichen nur auf php und js zurück. Die Ausgabe über MsgBox wiederum erinnert mich ein wenig an WindowsScriptingHost. Ausgaben über
    echo ""; oder print ""; zb sind wiederum nicht möglich...und If-Anweisungen sowie einige andere Dinge sind auch nur änlich, nicht identisch.

    Wäre eine Kombination aus AutoIt und php/js zb auch denkbar? Es ist ja durchaus möglich php-Scripte zu erstellen die auch js beinhalten und html in der regel wohl sowieso. :D
    Gehe jetzt mal nicht davon aus, da dies zu einfach wäre! :P
    Aber cool wäre es natürlich, da ich dann auch auf auf Dinge die ich in php bereits realisieren könnte zurückgreifen könnte, wie zb dasVerbinden mit mysql-Datenbanken oder das Auslesen und Auswerten sowie das Übergeben dieser Daten usw..

    2 Mal editiert, zuletzt von Chulio (27. Dezember 2013 um 21:59)

  • Ja Autoit ist eine eigene Scriptsprache und hat prinzipiell nichts mit PHP oder JS zu tun. Wie die meisten Script- / Programmiersprachen ähnelt Autoit aber natürlich vielen vorhandenen Sprachen, besitzt aber auch seine Eigenheiten.

    "print" oder "echo" gibt es in Autoit natürlich auch, nur wird es hier

    [autoit]

    consolewrite()

    [/autoit]

    genannt.

    Sprachkombinationen sind prinzipiell immer möglich. Es gibt zum Beispiel den ein oder anderen in Autoit geschriebenen Webserver, der prinzipiell in der Lage wäre HTML Seiten mit JS und PHP auszuliefern und entpsrechend zu antworten. Wieder andere Projekte beschäftigen sich mit inline Assembler, oder versuchen sich daran Autoit nach C oder JAVA zu übersetzen usw.

    Du wirst aber sehr wahrscheinlich keine fertigen PHP to Autoit Übersetzer finden und du wirst auch keine PHP Funktionen direkt in Autoit nutzen können.

    Autoit ist primär eher ungeeignet für Webservices. Zumindestens wenn es um Performance und viele Zugriffe geht ist Autoit aufgrund des fehlenden Multithreadings und der Tatsache, dass es sich um eine interpretierte Scriptsprache und keine Hochsprache handelt stark im Nachteil. Die Stärken von Autoit liegen eher in der Automatisierung von Aufgaben im administrativen Windowsumfeld, außerdem ist Autoit aufgrund der übersichtlichen Hilfe mit unmengen an Beispielscripten sehr einfach zu erlernen.

    Datenbanken lassen sich mit Autoit im übrigen problemlos ansprechen, dafür gibt es je nach DB verschiedene UDF die man nutzen kann, von der Anwendung her sollten die Unterschiede zu PHP oder anderen Sprachen minimal sein. Wer SQL beherscht / verstanden hat und bereits Erfahrungen damit in Verbindung mit einer Programmiersprache gesammelt hat sollte das auch in beliebigen anderen Sprachen hinbekommen.

    EDIT:

    Mehr über Autoit kannst du btw auch hier nachlesen: http://www.autoitscript.com/site/autoit/
    Für den Einstieg ebenfalls empehlenswert: https://autoit.de/index.php?page=Thread&amp;threadID=11898

    5 Mal editiert, zuletzt von misterspeed (27. Dezember 2013 um 23:49)

  • Du wirst deinem Namen voll und ganz gerecht!!! :rofl: Voll auf Speed!!! :rofl:
    Danke auch hier für deine Antwort!!!

    Was ich noch wissen wollen würde.. :D

    "Auch _FFClick sollte durch ein einfaches _FFFormSubmit() ersetzt werden können - kommt auf die Seite an."
    Die Tatsache das du sagst "ein einfaches" lässt mich erahnen, das ein FFFormSubmit in diesem Falle, sofern möglich schneller/besser wäre. Hab ich das so richtig verstanden?

  • Hallo,

    wenn es nur ein Formular auf der Seite gibt (bzw. das erste Formular auf der Seite) abgesendet werden soll, dann reicht _FFFormSubmit() ohne Parameter, dieses wartet dann auch, ob die Seite anschließend wieder vollständig geladen ist.
    Die Parameter braucht man, wenn es mehrere Formulare gibt, oder in Sonderfällen, z.B. wenn das Senden per JavaScript gestartet wird.

    Grüße
    Stilgar