Neue Funktionen und ToDo-List

  • In Arbeit (in der Reihenfolge):
    * Alle _FFForm-Funktionen auch ohne vorhandenes Formular (<FORM>) arbeiten lassen
    * onClick, onChange ... -Events für die Formularfunktionen (_FFForm*)
    * Formular-Auswahl über das action-Attribut
    * _FFFormSubmit optimieren
    * Suche aller "name", "id" ... Attribute über Substring bzw. RegEx
    * Parameterüberprüfung von _FFAction

    In Planung:
    * _FFFormOptionSelect: MultiSelect
    * Den unsichtbaren Start "irgendwie" optimieren (scheint aber nicht wirklich besser zu gehen ...)

    Viele Grüße
    Stilgar

    14 Mal editiert, zuletzt von Stilgar (23. September 2013 um 19:04)

  • Yeahhhhh bald kommen die Interessanten Funktionen.

    Für _FFClickImageBySize weiß ich nicht was besser wäre.
    Vielleicht das 1. aber mit dem $sMode als Option.

    So kann man Min / oder Max definieren und vielleicht als Option (gleich, kleiner, größer)

    Mal überlegen was ich damit machen kann...

    Grüße
    Frank

  • Also so etwas:

    [autoit]

    _FFClickImageBySize($Socket, $iMinWidth, $iMinHeight, $MaxWidth = -1, $MaxHeight = -1, $sMode="eq", $iTabIndex = -1)

    [/autoit]

    Bei sMode werden dann nur die beiden Min ausgewertet, ansonsten Min und Max.

    Grüße
    Thorsten

  • Na dann werde ich es mal so umsetzen wenn niemanden mehr dazu was einfällt.


    Nächste Frage:
    Nachdem ich in _FFAction noch ein TabExists und TabSelectByName einbauen wollte, stellt sich mir die Frage, ob nicht vielleicht extra _FFTab... Funktionen besser wären wie z.B.:

    [autoit]

    _FFTabSelect($Socket,$vTab,$sMode)
    ;$sMode = "last", "first", "next", "prev", "index", "title"

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

    _FFTabAdd($Socket,$bSelect)

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

    _FFTabClose($Socket,$vTab,$sMode)
    ;$sMode = "index", "title"

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

    _FFTabExist($Socket,$sTitle)

    [/autoit]

    Was haltet Ihr davon?

    Viele Grüße
    Stilgar

  • BugFix

    Der Fuchs wird in der 3er Version schneller rennen (sagt man...)

    Ich finde auch extra _FFTab... Funktionen besser.

    _FFTabSelect($Socket,$vTab,$sMode)
    und was ist mit byName?

    _FFTabAdd($Socket,$bSelect)
    an der letzten Position?

    _FFTabExist($Socket,$sTitle)
    Und vielleicht NotExist in einer Loop, damit man überprüfen
    kann, ob der Tab existiert, oder bereits geschlossen wurde..

    Grüße
    Frank

  • BugFix :
    Den Browser habe ich zwar noch nicht probiert, aber wenn es so ist wie auf der Homepage beschrieben, daß die gleiche Plugin-Architektur verwendet wird, dann sollte mit dem MozLab-Plugin alles genauso funktionieren.
    Nur die _FFStart wird nicht gehen, da diese nur die FireFox.exe startet, aber das läßt sich ja noch ändern :)

    [edit]
    @thunder-man :
    _FFTabSelect: byName = title

    _FFTabAdd: ja an der letzten Position

    _FFTabExist: Die Schleife kannst du damit doch selbst machen:
    While _FFTabExist(...)
    ...
    Wend
    oder was meinst du?

    Grüße
    Stilgar

    Einmal editiert, zuletzt von Stilgar (14. September 2007 um 21:18)

  • BugFix

    Ich habe gerade mal zum testen die FF.au3 für Flock angepasst
    (Nur flock.exe und den Registry Pfad)

    Mein "PeterZahlt FF" Script arbeitet mit Flock ganz normal.

    Nur habe ich 100% CPU last mit Flock.

    Hatte den Browser zum Glück test weise virtuell mit Altiris SVS installiert.
    Nun kann ich den an und ausschalten, oder wenn ich den Layer lösche ist
    es so, als hätte ich Flock nie installiert (Nur so als Tipp)

    Denke mal mit K-Meleon sollte das dann ebenfalls klappen.

    Stilgar
    _FFTabAdd: ja an der letzten Position

    Ich meinte dieses, weil bei mir die andere TabAdd Funktion immer den neuen Tab
    nach dem aktiven gelegt hat.

    Grüße
    Frank

    • Offizieller Beitrag

    Problem ist, ich bekomme das MozLab-Plugin nicht installiert.
    K-Meleon arbeitet nicht mit XML-Dateien (PlugIns alle auf DLL-Basis). Also habe ich die XML entpackt und in die entsprechenden Verzeichnisse kopiert.
    Fehlt aber noch irgendwo die "zentrale Anmeldung", in der PlugIn-Liste taucht es nicht auf.

  • Ich bekomme laufend diesen Fehler _FFLoadWait ==> Timeout: Can not check site status.

    Dabei wird die Seite aber erkannt.
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "94"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "98"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"

    Dann kommt 100 mal die Meldung mit ...
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"

    Und dann komischer Weise
    _FFLoadWait ==> Timeout: Can not check site status.

    Was ist denn da wohl los?

    Grüße
    Frank

    Edit:
    Also diese Fehlermeldung kommt definitiv immer.
    Die HP wird aber aufgerufen und angezeigt.

    Spoiler anzeigen

    __FFStartProcess: C:\Programme\Mozilla Firefox\firefox.exe" -repl -P "default"
    _FFConnect: Socket: 1732
    __FFSend: function FF__SimulateClick(oObject){try {var evt = document.createEvent("MouseEvents");evt.initMouseEvent("click", true, true, window,0, 0, 0, 0, 0,false, false, false, false,0, null);oObject.dispatchEvent(evt);return 1;} catch(e) {return 0;}}
    __FFRecv:
    __FFSend: function FF__SearchImageLink(RegEx){var html;for (i=0;i<content.document.links.length;i++){html=content.document.links.innerHTML;if (RegEx.test(html) && html.toLowerCase().indexOf("<img") != -1) return i;}return -1;}
    __FFRecv:
    __FFSend: function FF__SearchLink(sMode,sSearch){with(content.document) {var value;for (i=0;i<links.length;i++){switch (sMode) {case "href": value=links.href; break;case "text": value=links
    .text; break;case "id": value=links[i].id; break;case "name": value=links[i].name; break;case "title": value=links[i].title; break;default: return -1;}if (value.indexOf(sSearch) != -1) return i;}return -1;}}
    __FFRecv:
    __FFSend: content.document.location.href="http://www.freenet.de"
    __FFRecv: "http://www.freenet.de"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "50"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "58"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "32"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "76"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "87"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "96"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "96"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    __FFSend: document.getElementById('statusbar-icon').value
    __FFRecv: "100"
    _FFLoadWait ==> Timeout: Can not check site status.



    Edit2:
    Ich meine den Fehler gefunden zu haben. ( Na jedenfalls funktioniert es nun bei mir ...)


    In der FF.au3 habe ich in der Func _FFLoadWait( .... ) die While Schleife geändert. .... = 100
    in
    [/i][/i][/i]

    [autoit]

    '"100"'

    [/autoit]


    [i][i][i]Weil bei 100 nur als String Return 1 zurück gegeben wird...
    [/i][/i][/i]

    [autoit]

    Func _FFLoadWait(ByRef $Socket, $iDelay = 0, $iTimeOut = 45000)
    If Not __FFIsSocket($Socket) Then
    SetError(__FFError("_FFOpenURL", $_FF_ERROR_SocketError))
    Return 0
    EndIf

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

    Local $TimeOutTimer = TimerInit()

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

    Sleep($iDelay)

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

    While (TimerDiff($TimeOutTimer) < $iTimeOut)
    Sleep(500)
    If _FFSetGet($Socket, "document.getElementById('statusbar-icon').value") = '"100"' Then Return 1 ;---------------------
    EndIf
    WEnd

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

    SetError(__FFError("_FFLoadWait", $_FF_ERROR_Timeout, "Can not check site status."))
    Return 0

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

    EndFunc ;==>_FFLoadWait

    [/autoit]


    2 Mal editiert, zuletzt von thunder-man (8. Dezember 2007 um 21:35)

  • @thunder-man:
    Vielen Dank für den Hinweis. Ich werde mal über die Feiertage die Korrektur einfügen, die "neuen" Funktionen überprüfen und Beispiele in Hilfe einbauen. (Habe gerade einen kleinen Mangel an Freizeit).

    Viele Grüße
    Thorsten

  • @Stilgar
    Hört sich gut an, aber ... Weihnachten ist ja auch wichtig.
    Das mit der 100 in der Funktion Func _FFLoadWait(), ist ne komische Sache.
    Ich habe nun beides in meine FF.au3 100 und noch mal als String.

    Es gibt beide Ausgaben.
    __FFRecv: "100"
    oder auch __FFRecv: 100
    Bei mir kommt das vor, wenn ich in PeterZahlt einmal das "Default" Profil nutze, oder auch mal ein anderes.
    (Je nachdem kommt dann eine andere Ausgabe)
    Aber liegt es an mein Tool, oder die FF.au3 ?

    Grüße
    Frank

  • @thunder-man:
    Stimmt Weihnachten ist sehr wichtig, ich meinte auch viel mehr die Tage zwischen Weihnachten und Sylvester :)

    Komische Sache mit diesem Format. Mal sehen was ich da machen kann, oder eben beides einbauen.

    Viele Grüße
    Thorsten

  • @Stilgar
    Ich denke, bist Du mal wieder mehr Zeit hast, könnte doch beides in der FF.au3 stehen.
    Vielleicht wirst Du später mal die Ursache finden, aber im Moment scheint ja ne Lösung gefunden...
    (Und der Ladestatus der Seite kann abgefragt werden)

    so long
    Frank

  • Hier ist eine (Hilfs)Funktion, die die Eigenschaften eines Formulars und dessen Elementen in einem Array zurückgibt:

    Spoiler anzeigen
    [autoit]

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

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

    $Socket = _FFStart("http://autoit.de/index.php?form=UserLogin")

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

    _FFSetGet($Socket,"")

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

    $form = _FFFormInspect($Socket)

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

    _ArrayDisplay($form)

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

    _FFQuit($Socket)

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

    ;===============================================================================

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

    Func _FFFormInspect(ByRef $Socket, $iForm=0)

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

    Local $frm = ".forms[" & $iForm & "]"
    Local $elm = ""
    Local $elements = _FFSetGet($Socket, $frm & ".length")+3
    Local $element[$elements][6]

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

    $element[0][0] = "forms[" & $iForm & "]:"
    $element[0][1] = "Name:"
    $element[1][1] = _FFSetGet($Socket, $frm & ".name")
    $element[0][2] = "ID:"
    $element[1][2] = _FFSetGet($Socket, $frm & ".id")
    $element[0][3] = "Action:"
    $element[1][3] = _FFSetGet($Socket, $frm & ".action")
    $element[0][4] = "Method:"
    $element[1][4] = _FFSetGet($Socket, $frm & ".method")
    $element[2][1] = "Type:"
    $element[2][2] = "Name:"
    $element[2][3] = "ID:"
    $element[2][4] = "Value:"
    $element[2][5] = "Checked:"

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

    For $i = 3 to $elements-1
    $elm = "elements[" & $i -3 & "]"
    $frm = ".forms[" & $iForm & "]." & $elm
    $element[$i][0] = $elm
    $element[$i][1] = _FFSetGet($Socket, $frm & ".type")
    $element[$i][2] = _FFSetGet($Socket, $frm & ".name")
    $element[$i][3] = _FFSetGet($Socket, $frm & ".id")
    $element[$i][4] = _FFSetGet($Socket, $frm & ".value")
    $element[$i][5] = _FFSetGet($Socket, $frm & ".checked")
    Next

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

    Return $element

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

    EndFunc

    [/autoit]

    Ausgabe per _ArrayDisplay:
    [Blockierte Grafik: http://www.thorsten-willert.de/Themen/AutoIt-FF.au3/Testversion/_FFFormInspect_ArrayDisplay.png]

    Damit lassen sich Formulare wesentlicher einfacher ausfüllen, als den HTML-Quelltext zu durchforsten.

    Was meint Ihr dazu?

    Grüße
    Stilgar

    2 Mal editiert, zuletzt von Stilgar (30. Mai 2008 um 19:47)

  • ned schlecht :)
    Echt super :)
    Doch wo bleiben die Frame-Funktionen?
    Ich kann keine Lösung finden :/
    Ich hoffe du kennst dich da besser aus als ich ^^ :love: