Neue Funktionen und ToDo-List

  • Ein Thema im Forum hat mich auf Idee gebracht, für eine Funktion, die nur eine Zelle einer Tabelle ausließt - hier ist sie:

    Spoiler anzeigen
    [autoit]

    ; #FUNCTION# ===================================================================
    ; Name ..........: _FFTableGetCell
    ; Description ...: Gets the text or HTML of a table cell
    ; AutoIt Version : V3.3.0.0
    ; Syntax ........: _FFTableGetCell(ByRef $Socket, $vTable, $iColumn, $iRow[, $sMode = "index"[, $sReturnMode = "text"[, $bCompress = true]]])
    ; Parameter(s): .: $Socket - TCP Socket
    ; $vTable - index (0-n), name
    ; $iColumn - Column (0-n)
    ; $iRow - Row (0-n)
    ; $sMode - Optional: (Default = "index") : index (0-n), name, id
    ; $sReturnMode - Optional: (Default = "text") : text, html
    ; $bCompress - Optional: (Default = true) : Removes double withespaces
    ; Return Value ..: Success - Text or HTML
    ; Failure - 0
    ; @ERROR -
    ; Author(s) .....: Thorsten Willert
    ; Date ..........: Sat Feb 14 23:00:56 CET 2009
    ; Related .......: _FFTableWriteToArray
    ; Example .......: Yes
    ; ==============================================================================
    Func _FFTableGetCell(ByRef $Socket, $vTable, $iColumn, $iRow, $sMode = "index", $sReturnMode = "text", $bCompress = true)
    If Not __FFIsSocket($Socket) Then
    SetError(__FFError("_FFTableGetCell", $_FF_ERROR_SocketError, $Socket))
    Return 0
    EndIf

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

    If $sMode = Default Then $sMode = "index"

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

    If Not IsInt($vTable) And $sMode = "index" Then
    SetError(__FFError("_FFTableGetCell", $_FF_ERROR_InvalidDataType, $vTable))
    Return 0
    EndIf
    If Not IsInt($iColumn) Then
    SetError(__FFError("_FFTableGetCell", $_FF_ERROR_InvalidDataType, $iColumn))
    Return 0
    EndIf
    If Not IsInt($iRow) Then
    SetError(__FFError("_FFTableGetCell", $_FF_ERROR_InvalidDataType, $iRow))
    Return 0
    EndIf
    Switch StringLower($sReturnMode)
    Case "text"
    $sReturnMode = "textContent"
    Case "html"
    $sReturnMode = "innerHTML"
    Case Else
    SetError(__FFError("_FFTableGetCell", $_FF_ERROR_InvalidValue, "$sReturnMode: " & $sReturnMode))
    Return 0
    EndSwitch

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

    Local $sObject = "content.document"

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

    Switch StringLower($sMode)
    Case "index"
    $sObject &= ".getElementsByTagName('tbody')[" & $vTable & "]"
    Case "name"
    ContinueCase
    Case "id"
    $sObject &= ".getElementsByTagName('tbody')['" & $vTable & "']"
    Case Else
    SetError(__FFError("_FFTableGetCell", $_FF_ERROR_InvalidValue, "$sMode: " & $sMode))
    Return 0
    EndSwitch

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

    Local $sRndErr = "_FFTableGetCell_Err:" & Random(10000,99999,1)
    Local $sElements = StringFormat("getElementsByTagName('tr')[%i].getElementsByTagName('td')[%i]",$iRow,$iColumn)
    Local $sCommand = StringFormat("try{with(%s){(%s != null ? %s.%s : '%s')}}catch(e){'%s';};",$sObject,$sElements,$sElements,$sReturnMode,$sRndErr,$sRndErr)

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

    Local $sRetVal = _FFSetGet($Socket,$sCommand)
    If $sRndErr <> $sRetVal Then
    If $bCompress Then Return StringRegExpReplace($sRetVal, "[\s]+", " ")
    Return $sRetVal
    Else
    SetError(__FFError("_FFTableGetCell", $_FF_ERROR_NoMatch, "Table/Column/Row: " & $vTable & "/" & $iColumn & "/" & $iRow))
    Return 0
    EndIf

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

    EndFunc ;==> _FFTableGetCell

    [/autoit]


    :P hoffentlich muß ich das nicht erklären :D

    Die ist auch schon in der aktuellen Testversion drin.

    Viel Spaß damit!

    Einmal editiert, zuletzt von Stilgar (14. Februar 2009 um 23:30)

  • Wieder was zum Testen:
    http://www.thorsten-willert.de/Themen/AutoIt-…tversion/FF.au3

    Was sich seit der letzten Version so getan hat :D

    V0.4.0.3:
    - Changed: _FFLoadWait now works with the EventListener "DOMContentLoaded"
    removed last parameter from _FFLoadWait
    - Changed: Renamed _FFKeyPress to _FFDispatchKeyEvent and added a new parameter for the event type:
    _FFDisPatchKeyEvent(ByRef $Socket, $sObject, $iKeyCode[, $sEventType = "keydown"])
    - Fixed: _FFStart start-mode 1: added option -new-window to the FF commandline
    - Misc: Added german function description (Beschreibung)
    - Removed: __FFGetBrowserVersion
    - Removed: wrappedJSObject from _FFSetGet (hope that works)

    V0.4.0.2:
    - New: _FFGetObject: Returns a 2 dim array with informations of an object in FF
    _FFGetObject(ByRef $Socket[, $sObject = "window"])
    - New: _FFFormGetLength: Returns the length of the forms
    - New: Global Const $_FF_AU3VERSION = FF.au3 Version
    - New: Global var $_FF_ERROR_MSGBOX = True = show errors in msgboxes if compiled
    - Changed: _FFKeyPress: Now you can can simulate every key on every object
    _FFKeyPress(ByRef $Socket, $sObject, $iKeyCode)
    - Misc: Disabled the output to the console while transfering the JavaScripts and
    in the function _FFLoadWait

    !! Only for test
    - New: Global Array with the last error:
    $_aFF_ERRORS[0][0] time
    $_aFF_ERRORS[0][1] function
    $_aFF_ERRORS[0][2] error int
    $_aFF_ERRORS[0][3] error string
    $_aFF_ERRORS[0][4] message

    V0.4.0.1:
    - Optimized: _FFLoadWait, _FFFormSubmit, _FFStart, __FFStartProcess

    V0.4.0.0:
    - New/Changed: Added parameter $iFilter to (instead of $bCompress)
    _FFReadHTML, _FFReadText, _FFGetValueById, _FFGetValueByName, _FFGetValueByXPath
    Values are:
    $_FF_FILTER_NONE = 0 ; no filter
    $_FF_FILTER_NONE_ASCII = 1 ; remove non ASCII characters
    $_FF_FILTER_WHITESPACES = 2 ; remove all double whitespaces
    $_FF_FILTER_LINEFEEDS= 4 ; remove all double linefeeds
    you combinate them with +

    - New: _FFFormGetLength
    - Added: _FFTabAdd parameter $bLoadWait
    - Added: _FFFormSubmit parameter $bLoadWait
    - Changed: _FFFrameSelected => _FFFrameGetSelected
    - Changed: _FFTabLength => _FFTabGetLength
    - Changed: _FFTabSelected => _FFTabGetSelected
    - Changed: _FFTabSelect => _FFTabSetSelected
    - Changed: _FFGetLinks => _FFLinksGetAll
    - Optimized: _FFFormReset
    - Updated: __FFIsURL - RegEx

    Diese Textfilter funktionieren noch nicht und _FFFormSubmit gibt noch keine wirklichen Fehlermeldungen aus, dafür sollte nun _FFLoadWait immer funktionieren.

  • Habe gerade dort:
    https://autoit.de/index.php?page…mp;postID=78147
    gesehen, was das manchmal für ein Drama ist an Teile von Webseiten heranzukommen, darum gibts nun eine erweiterte Variante der _FFGetValueByXPath:

    z.B. einfach mal einen Film in der IMDB aufrufen und diesen Befehl aufrufen:

    [autoit]

    _FFXPath($Socket,"//div[@class='photo' and position()=1]/a/img",$_FF_XPATH_FIRST_ORDERED_NODE_TYPE,"src")

    [/autoit]

    und schon hat man die Quelle des (DVD)-Bildes :D
    oder die Höhe:

    [autoit]

    _FFXPath($Socket,"//div[@class='photo' and position()=1]/a/img",$_FF_XPATH_FIRST_ORDERED_NODE_TYPE,"height")

    [/autoit]


    Die Abfrage läßt sich natürlich z.B mit dem XPather erstellen.

    Kommt alles im Nächsten Update, die Collections werden dann als Array zurückgegeben.
    Wer schon mal testen wil:
    https://autoit.de/Testversion

    [EDIT]
    Mit der neuen Version kann man nicht nur Abfragen erstellen, sondern auch Werte ändern z.B auf der Seite:
    http://ff-au3-example.thorsten-willert.de/

    [autoit]

    _FFXPath($Socket,"//form/*/input[@name='zutat' and @value='salami']",$_FF_XPATH_FIRST_ORDERED_NODE_TYPE,"checked=true")

    [/autoit]

    Sollte ich vielleicht die Reihenfolge der Parameter ändern?

    Viel Spaß damit,
    Stilgar

    3 Mal editiert, zuletzt von Stilgar (20. Februar 2009 um 17:02)

  • In der neuesten Testversion habe ich XPath um die XPathResults UNORDERED_NODE_SNAPSHOT_TYPE und ORDERED_NODE_SNAPSHOT_TYPE erweitert. Diese gebe ein Array mit allen gefundenen Ergebnissen zurück z.B.:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <FF.au3>

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

    $Socket = _FFConnect()
    _FFTabAdd($Socket,"http://ff-au3-example.thorsten-willert.de/")
    $aTmp = _FFXPath($Socket,"//img[starts-with(@src,'http://www.thorsten-willert.de/bilder')]","src",7)
    _ArrayDisplay($aTmp)

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

    $aTmp = _FFXPath($Socket,"//legend","textcontent",7)
    _ArrayDisplay($aTmp)

    [/autoit]

    Testversion

    Viel Spaß damit!

    Grüße
    Stilgar

  • Wieder was zum Testen - ein paar neue Funktionen zur Fenster-Verwaltung:

    V0.4.1.0:
    * _FFWindowClose(ByRef $Socket[, $sSearch = "Mozilla FireFox"[, $sSearchMode = "title"]])
    $sSearchMode = title, label (tab) oder (aktuelle) href

    * _FFWindowCloseCurrent(ByRef $Socket)
    * _FFWindowSelectMostRecent(ByRef $Socket)
    * _FFWindowOpen(ByRef $Socket[, $sURL = "about:blank"])

    http://thorsten-willert.de/Themen/AutoIt-…tversion/FF.au3

    Eine Funktion zur Auswahl der Fenster folgt noch.

    Viel Spaß damit!
    Grüße
    Stilgar

  • Noch mehr zum Testen:

    V0.4.1.0b-2
    - New: _FFWindowSelect(ByRef $Socket[, $sSearch = "Mozilla Firefox"[, $sSearchMode = "title"]])
    - New: _FFWriteHTML(ByRef $Socket[, $sHTML = ""])
    - New: _FFClickXY(ByRef $Socket[, $iX = 0[, $iY = 0[, $bLoadWait = true]]])
    - Changed: _FFReadHTML(ByRef $Socket[, $sMode = "body"[, $iFilter = 0]])
    - Changed: Renamed _FFGetObject to _FFGetObjectInfo (because the result is no "object")
    - Fixed: _FFTabExists

    Testversion

    Viel Spaß damit.
    Grüße
    Stilgar

  • Nachdem das Ändern der FF Einstellungen per _FFSetGet etwas "mühselig" ist, hier ein Vorschlag für drei neue Funktionen,
    den einzig wichtigen Parameter den man dafür braucht ist der Name der Einstellung, diese läßt sich aus "about:config" herauskopieren, alles andere (Datentyp usw.) übernehmen die Funktionen:

    _FFPrefSet: Setzt einen Wert (und überprüft gleichzeitig ob er gesetzt wurde)
    _FFPrefGet: Ließt einen Wert nur aus
    _FFPrefReset: Setzt die Voreinstellung für den Eintrag

    Spoiler anzeigen
    [autoit]

    Func _FFPrefReset(ByRef $Socket, $sName)
    If Not __FFIsSocket($Socket) Then
    SetError(__FFError("_FFPrefReset", $_FF_ERROR_SocketError))
    Return 0
    EndIf

    Local $iType = _FFSetGet($Socket, 'Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch).getPrefType("' & $sName & '");')
    If @error Then
    SetError(1)
    Return 0
    EndIf

    If $iType <> 0 Then
    _FFSetGet($Socket, 'Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch).clearUserPref("' & $sName & '");')
    If Not @error Then Return 1
    Else
    SetError(__FFError("_FFPrefReset", $_FF_ERROR_NoMatch, "$sName: " & $sName))
    EndIf

    Return 0
    EndFunc
    ; ------------------------------------------------------------------------------
    Func _FFPrefGet(ByRef $Socket, $sName)
    If Not __FFIsSocket($Socket) Then
    SetError(__FFError("_FFPrefGet", $_FF_ERROR_SocketError))
    Return 0
    EndIf

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

    Local $sCommand
    Local $iType = _FFSetGet($Socket, 'Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch).getPrefType("' & $sName & '");')
    If @error Then
    SetError(1)
    Return 0
    EndIf

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

    Switch $iType
    Case 0
    SetError(__FFError("_FFPrefGet", $_FF_ERROR_NoMatch, "$sName: " & $sName))
    Return 0
    Case 32 ; PREF_STRING
    $sCommand = "getCharPref"
    Case 64 ; PREF_INT
    $sCommand = "getIntPref"
    Case 128 ; PREF_BOOL
    $sCommand = "getBoolPref"
    EndSwitch

    $sCommand = StringFormat('Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch).%s("%s");',$sCommand, $sName)

    Return _FFSetGet($Socket, $sCommand)
    EndFunc
    ; ------------------------------------------------------------------------------
    Func _FFPrefSet(ByRef $Socket, $sName, $vValue)
    If Not __FFIsSocket($Socket) Then
    SetError(__FFError("_FFPrefSet", $_FF_ERROR_SocketError))
    Return 0
    EndIf

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

    Local $sCommand
    Local $iType = _FFSetGet($Socket, 'Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch).getPrefType("' & $sName & '");')
    If @error Then
    SetError(1)
    Return 0
    EndIf

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

    Switch $iType
    Case 0
    SetError(__FFError("_FFPrefSet", $_FF_ERROR_NoMatch, "$sName: " & $sName))
    Return 0
    Case 32 ; PREF_STRING
    If Not IsString($vValue) Then
    SetError(__FFError("_FFPrefSet", $_FF_ERROR_InvalidDataType, "$vValue: " & $vValue))
    Return 0
    EndIf
    $vValue = "'" & $vValue & "'"
    $sCommand = "setCharPref"
    Case 64 ; PREF_INT
    If Not IsInt($vValue) Then
    SetError(__FFError("_FFPrefSet", $_FF_ERROR_InvalidDataType, "$vValue: " & $vValue))
    Return 0
    EndIf
    $sCommand = "setIntPref"
    Case 128 ; PREF_BOOL
    If Not IsBool($vValue) Then
    SetError(__FFError("_FFPrefSet", $_FF_ERROR_InvalidDataType, "$vValue: " & $vValue))
    Return 0
    EndIf
    $vValue = __FFB2S($vValue)
    $sCommand = "setBoolPref"
    EndSwitch

    $sCommand = StringFormat('Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch).%s("%s",%s);',$sCommand, $sName, $vValue)

    _FFSetGet($Socket, $sCommand)
    If Not @error Then
    Local $vRetVal = _FFPrefGet($Socket, $sName)
    If $vRetVal = $vValue Then Return 1
    EndIf

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

    Return 0
    EndFunc

    [/autoit]

    Was haltet Ihr davon?

    Grüße
    Stilgar

  • Wieder was zum Ausprobieren V0.4.1.4:

    http://thorsten-willert.de/Themen/AutoIt-…tversion/FF.au3

    - New: _FFXPath: $iReturnType 10 = CONTAINS / $sAttribute = substring
    - Changed: Added better error handling to _FFSearch
    - Changed: Added added parameter for _FFAction / about e.g. _FFAction($Socket,"about","mozilla")
    - Changed: Added _FFLoadWait to _FFAction: back, forward, home, reload
    - Chagend: Added _FFLoadWait to _FFTabExists, because sometimes a "loading" tab was not found.
    - Changed: _FFClick now returns after a sleep from 25ms
    - Changed: _FFXPath added keyword Default to the $sAttribute-parameter
    - Fixed: __FFRecv boolean conversion for _FFXPath
    - Fixed: _FFXPath, now the return value without leading and trailing withespaces to avoid comparsion errors.
    - Fixed: _FFFormGetElementsLength

    Viel Spaß beim Testen!

    Grüße
    Stilgar

    Einmal editiert, zuletzt von Stilgar (21. März 2009 um 23:45)

  • Was zum ausprobieren V0.5.1.4:

    - New: _FFObj: access to FireFox objects
    - New: _FFObjDelete: deleting objects in the FFau3-object
    - New: _FFObjGet: returns an "object" (string)
    - New: _FFObjNew: creates a new object in the FFau3-object

    - New: _FFXPath: Mode 6 and 7 now can set an attribute in all search results
    z.B lassen sich damit nun alle Checkboxen auf einer Seite auf einmal (wie sagt man dazu) ankreuzen? :D
    _FFXPath("//input[@type='checkbox']","checked=true",7)

    oder eben sonstige Attribute ändern.

    Grüße
    Stilgar

  • Wieder was zum Ausprobieren, nach einem größeren Umbau V0.5.3.0:

    Ein paar Funktionen komplett neu geschrieben:
    _FFImageClick
    _FFImagesGetBySize
    _FFLinkClick

    - New: _FFImagesGetBySize: Returns an array with the indizes of all matching images.
    (_FFXPath only returns images witch haves the attributes width and heigth)
    - Added: _FFClick can now handle "objects" from _FFObjGet
    - Added: _FFImageClick: $bLoadWait
    - Renamed: _FFClickLink => _FFLinkClick !!! (incl. wrapper)
    - Renamed: _FFClickImage => _FFImageClick !!! (incl. wrapper)
    - Removed: _FFClickImageBySize !!!
    - Removed: Wrapper for _FFSetGet()
    - Optimized: All functions
    - Updated: All error messages.

    solte das letzte Mal gewesen sein, daß ich Funktionen umbenannt habe :D

    http://thorsten-willert.de/Themen/AutoIt-…tversion/FF.au3

    Viel Spaß beim Testen!
    Stilgar

  • V0.5.3.2

    - New: _FFDialogWait($sString[, $sText= ""[, $iTimeOut = 10000[, $bClose = True]]])
    - Fixed: _FFConnect now returns an error if you try to connect to a non browser window.
    - Fixed: _FFSetValueById and _FFSetValueByName can now set unicode chars, too.
    - Fixed: _FFCmd / _FFClick: fixed problems with element-names in arguments e.g:
    _FFCmd(".ElementName.ElementName ....")


    [autoit]

    _FFDialogWait($sText[, $sTitle = ""[, $iTimeOut = 10000[, $bClose = True]]])

    [/autoit]


    Diese Funktionen wartet auf Dialog-Boxen wie "alert" und schließt diese auch wieder, wenn sie gefunden werden.

    ! Das Umlaut-Problem mit _FFSetValueById und _FFSetValueByName ist nun auch behoben.

    Grüße
    Stilgar

  • Wieder was zum Testen V0.5.3.8b-4:

    http://thorsten-willert.de/Themen/FFau3/Testversion/FF.au3

    * _FFTableWriteToArray komplett neu geschrieben:

    [autoit]

    _FFTableWriteToArray([$vTable = 0[, $sMode = "index"[, $sReturnMode = "text"[, $iFilter = 0[, $bTransponse = False]]]]])

    [/autoit]

    - Parameter $iFilter eingebaut (zum Filtern von Texten - siehe unter anderem in der Dokumentation bei _FFXPath)
    - Geschwindigkeit um Faktor 5-50 (und evtl mehr) gesteigert je nach Tabellentyp und Größe.
    Tabellen mit sehr vielen rowspan und colspan Attributen werden immer noch relativ langsam verarbeitet, während Tabellen ohne diese Attribute und mit einem großen Breiten/Längen (oder umgekehrt) Verhältnis sehr schnell verarbeitet werden, da nun eine Spalte/Zeile mit einer Anweisung ausgelesen wird.
    Ist leider Aufgrund der Kommunikationsart nicht mehr wesentlich zu steigern, außer durch eine Komplettlösung in JavaScript.

    * Dynamische Anpassung des "TCPTimeOut" in _FFConnect
    * Fehler in _FFFormSubmit behoben
    * Fehler beim Senden/Setzen des Zeichens ' als "value" behoben

  • V0.5.3.9b-1

    Einen "Recorder" eingebaut, mit fünf winzigen Funktionen:
    * _FFRecordStart( $sName = ''" ) - Startet die Aufnahme der Funktionen, wird $sName angegeben wird eine Funktion generiert
    * _FFRecordStop() - beeendet die Aufnahme und schließt evtl. die Funktion ab
    * _FFRecordOn() / _FFRecordOff() - zum Pausieren der Aufnahme
    * _FFRecordGet() - gibt die "Aufnahme" als String zurück
    * _FFRecordAppend($sString) - hängt einen Ausdruck an die aktuelle Aufnahme
    Sinn des Ganzen:
    Aufnahme der wichtigsten Funktionen von Programmen, damit daraus ein optimiertes Programm erzeugt werden kann, vor allem bei Programmen die zuerst viele Informationen auf einer Seite suchen müßen um dann im Endeffekt nur ein Feld auszufüllen.

    Einfaches Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <FF.au3>

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

    _FFConnect()

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

    _FFRecordStart()

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

    _FFOpenURL("http://ff-au3-example.thorsten-willert.de/")

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

    _FFLinkClick("mozlab")
    Sleep(3000)
    _FFRecordAppend("Sleep(3000)")
    _FFAction("back")

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

    _FFSetValueByName("fname", "Vorname")
    _FFSetValueByName("lname", "Vorname")

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

    _FFRecordStop()

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

    ConsoleWrite( _FFRecordGet() )

    [/autoit]


    Ergibt folgenden Code:

    Spoiler anzeigen
    [autoit]

    _FFCmd(".location.href='http://ff-au3-example.thorsten-willert.de/';")
    _FFLoadWait(0, 20000)
    _FFCmd("FFau3.simulateClick(window.content.document.links[2],0,0);")
    _FFLoadWait(0, 20000)
    Sleep(3000
    _FFCmd("gBrowser.goBack()")
    _FFLoadWait(0, 20000)
    _FFCmd(".getElementsByName('fname')[0].value='Vorname';")
    _FFCmd(".getElementsByName('lname')[0].value='Vorname';")

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

    es sind noch nicht alle Funktionen dafür ausgelegt, d.h. manchmal sind einige überflüssige Programmzeilen dabei (nein bei dem Beispiel paßt alles :) )

    Viel Spaß damit!

    Einmal editiert, zuletzt von Stilgar (9. September 2009 um 20:08)

  • Da die Kommunkation mit MozRepl leider etwas träge ist, hier eine kleine Routine die das Ganze bei mehreren aufeinanderfolgenden _FFCmds beschleunigt (momentan allerdings mit Verlust einer genauen Fehlerdiagnose):

    Man übergibt der Funktion ein Array aus Anweisungen, wie normalweise bei _FFCmd, und erhält ein Array an Ergebnissen zurück.

    Vorteil gegenüber _FFCmd ist, daß nur einmal gesendet und empfangen wird (jedesmal ca. 10-20ms + Verzögerung der Verbindung)

    Die Funktion ist weder in der Normalen-, noch in der Testversion enthalten wird aber evtl. eingebaut.

    Aufruf:

    Spoiler anzeigen
    [autoit]

    Global $aCmd[3] = ["navigator.userAgent", ".title", ".location.href"]
    $a = _FFCmd2($aCmd)
    _ArrayDisplay($a)

    [/autoit]

    Funktion:

    Spoiler anzeigen
    [autoit]

    Func _FFCmd2($aCmd, $iTimeOut = 30000)
    Local $sCmd = ""
    Local $sDL = "FF" & Random(100, 999, 1)
    Local $iEnd = UBound($aCmd) - 1
    For $i = 0 To $iEnd
    If StringLeft($aCmd[$i], 1) = "." Then $aCmd[$i] = "window.content.document" & $aCmd[$i]
    Next
    For $i = 0 To $iEnd - 1
    $sCmd &= $aCmd[$i] & "+'" & $sDL & "'+"
    Next
    $sCmd &= $aCmd[$i] & ";"
    Local $sRet = _FFCmd($sCmd, $iTimeOut)
    If @error Then SetError(@error, 0, "")
    Return StringSplit($sRet, $sDL, 1)
    EndFunc ;==>_FFCmd2

    [/autoit]

    ist das brauchbar?

  • Eine mit Vorsicht zu genießende Testversion: V0.5.3.9b-4

    http://thorsten-willert.de/Themen/FFau3/Testversion/FF.au3

    - Added: Support for nested frames
    - Added: Global Var $_FF_FRAME - holds the current frame as string
    - Added: _FFLoadWaitTimeOut, to change the global-timeout for _FFLoadWait
    - Added: Global $_FF_LOADWAIT_TIMEOUT = 120000
    - Added: _FFRecord* : Some functions recording (only a test)
    - only for use between _FFConnect / _FFStart / _FFIsConnected and _FFDisConnect / _FFQuit
    - the recorded functions are not the same like in your original script!!!
    - Added: Global Var $_FF_RECORD - recording on/off
    - Added: Global Var $_FF_RECORDED_CMD - recorded script
    - Changed: Rebuild all frame-functions
    - Changed: For recording: _FFLoadWait, _FFLinkClick, _FFXPath, _FFImageClick
    - Changed: Limited timeout for _FFLoadWait to min. 1000ms
    - Optimized: _FFAction, _FFFormReset, _FFGetObjectInfo, _FFCmd, _FFWindowGetHandle, _FFObjGet
    - Removed: __FFAddStatus, __FFRemoveStatus, __FFSetStatus, __FFGetStatus

    wie ihr seht habe ich einiges geändert, vor allem das interne Handling der Frames, was sich auf so ziemlich jede Funktion auswirkt ...

    Dennoch viel Spaß beim Testen!

  • Eine immer noch mit Vorsicht zu genießende Testversion: V0.5.3.9b-7

    http://thorsten-willert.de/Themen/FFau3/Testversion/FF.au3

    • Added: _FFImageMapClick($vArea[, $sModeArea = "index"[, $vMap = 0[, $sModeMap = "index"[, $bLoadWait = True]]]])
    • Added: _FFGetValue($sElement[, $sMode = "elements"[, $iIndex = 0[, $iFilter = 0]]])
    • Added: _FFImagesGetBySize: parameter $iPercent +/- search-tolerance in percent for $sMode = "eq"
    • Changed: _FFGetValueById and _FFGetValueByName now only wrappers for _FFGetValue
    • Optimized: _FFTableWriteToArray - up to 100% faster
    • Removed: _FFFrameGetSelected, __FFAddStatus, __FFRemoveStatus, __FFSetStatus, __FFGetStatus
    • Fixed: _FFImagesGetBySize: $sMode now case insensitive

    Die Dokumentation werde ich mit der nächsten "offiziellen" Version wieder anpaßen - ist leider mehr Arbeit als das Programmieren.

    jEdit4AutoIt: Syntax-highlighting, XInsert, Autovervollständigung usw. werden durch das Macro "AutoIt/Update UDFs" angepaßt.
    SciTe: Die Calltips-Dateien werden erst mit Update der Dokumentation neu generiert:
    http://thorsten-willert.de/Themen/FFau3/Verschiedenes/files