FF-Management - FireFox.au3

  • Eher noch ein theoretisches Projekt:
    Den FireFox von AutoIt aus über http://dev.hyperstruct.net/mozlab steuern. Dies scheint momentan die einzige Möglichkeit dafür zu sein. Das einzige was eben zusätzlich benötigt wird, ist das passende FireFox-Plugin. Die Kommunikation damit findet über Telnet Port 4242 statt (den Port kann man auch ändern).
    Damit könnte man den FF auch auf einem anderen Rechner bzw. OS steuern!!! :D

    Die GUi des FF besteht rein aus XUL und JavaScript Mit MozLab kann man damit auf jedes Element zugreifen, lesen (und verändern).
    Siehe Video:
    http://dev.hyperstruct.net/movie/mozrepl.html

    Die AutoIt Funktionen die sich daraus ergeben, sind also eine reine Kommunikation per Telnet.

    Was haltet ihr davon?

  • Ich hab gestern noch pee gefragt ob er nicht wüsste ob es sowas wie ne Firefox.au3 gibt zum steuern des FF

    Das wär ma richtig geil wenns fertig ist.
    Hab mir das Plugin ma runtergeladen


    ~Edit~
    Leider funzt das Plugin bei mir nicht.
    Und support tickets kann ich auf deren seite nicht schreiben weil das als spam gewertet wird :(

    Dieser Beitrag wurde 9521 mal editiert, zum letzten Mal von Blubkuh: Morgen, 02:28.

    [autoit]

    If Not $Elephant Then $Irelephant = True

    [/autoit]

    Einmal editiert, zuletzt von Blubkuh (18. August 2007 um 15:07)

  • Moin !
    das wäre jawphl so richtig geil, wenn das iwann mal gehen würde!!! Der IE tuts bei mir nämlich nicht^^ aber ich benuze d en sowieso nie :P
    also von mir aus kann man da was scripten

  • nach jedem buchstaben den ich schreibe drückt die konsole von mozrel automatisch enter und ich kann ned mehr als ein buchstabe schreiben. und dann sagter mir das er mir, dass es den befehl z.b. e nicht gibt ...was ja auch logisch ist ..aber ich kann ned mher als einen buchstaben eingeben :(

    Dieser Beitrag wurde 9521 mal editiert, zum letzten Mal von Blubkuh: Morgen, 02:28.

    [autoit]

    If Not $Elephant Then $Irelephant = True

    [/autoit]
  • Las mich raten du probierst das mit dem telnet Dings von Microsoft? Entweder du nimmst Putty, oder das hier:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    Dim $IP = "127.0.0.1"
    Dim $port = "4242"
    Dim $recv, $send

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

    TCPStartup()
    Dim $Socket = TCPConnect($IP, $port)
    If $Socket = -1 Then
    MsgBox(16, "Error", "")
    Exit
    Else
    Opt("TCPTimeout", Ping($IP)+100 )
    EndIf

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

    ;===============================================================================
    GUICreate("Telnet Box", 700, 300)
    $edit = GUICtrlCreateEdit("", 10, 10, 680, 250, $WS_VSCROLL)
    $input = GUICtrlCreateInput("", 10, 270, 580, 21)
    $button = GUICtrlCreateButton("Send", 600, 270, 80, 20, $BS_DEFPUSHBUTTON)
    GUISetState()
    ;===============================================================================
    While 1 ;Message Loop
    Dim $nMsg = GUIGetMsg()
    Select
    Case $nMsg = $GUI_EVENT_CLOSE
    Exit
    Case $nMsg = $button
    If GUICtrlRead($input) = "ESC" Then
    TCPSend($Socket, Chr(27))
    Else
    $send = TCPSend($Socket, GUICtrlRead($input) & @CRLF)
    If @error Or $send < 0 Then ExitLoop
    EndIf
    GUICtrlSetData($input, "")
    GUICtrlSetState($input, $GUI_FOCUS)
    Case Else
    $recv = TCPRecv($Socket, 4096)
    If @error Then ExitLoop
    If $recv <> "" Then GUICtrlSetData($edit, " > " & @CRLF & StringReplace($recv, @LF, @CRLF) & GUICtrlRead($edit) )
    EndSelect
    Wend ;==> Message Loop
    ;===============================================================================
    Func OnAutoItExit()
    If Not $Socket = -1 Then
    TCPCloseSocket($Socket)
    EndIf
    TCPShutdown()
    EndFunc ;==> OnAutoItExit

    [/autoit]

    ist zwar nicht hübsch, aber geht :)

    Einmal editiert, zuletzt von Stilgar (18. August 2007 um 18:02)

  • Erster Test:

    Hierher navigieren und den Quelltext der Seite anzeigen:

    Spoiler anzeigen
    [autoit]

    #region Includes
    #include <Array.au3>
    #include "FF.au3"
    #endregion Includes
    ;===============================================================================
    Dim $IP = "127.0.0.1"
    Dim $HTML
    ;===============================================================================
    $Socket = _FFConnect($IP) ; Zu FireFox Verbinden (Port als opt. 2 Parameter)

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

    If $Socket <> -1 Then
    _FFNavigate($Socket, "http://www.autoit.de",6000) ; Adresse anwählen
    ; die 6000 sind momentan noch eine simple Verzögerung bis die Seite
    ; geladen ist
    $HTML = _FFReadHTML($Socket) ; HTML Quelltext auslesen

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

    ; und per ArrayDisplay ausgeben
    If Not @error Then _ArrayDisplay(StringSplit($HTML,@CRLF))
    Else
    MsgBox(16, "Error", "Connection error")
    EndIf

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

    _FFDisConnect($Socket) ; FireFox Verbindung schließen

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

    Exit

    [/autoit]

    Und hier die pre Alpha Version der FF.au3 (ohne Doku):

    Spoiler anzeigen
    [autoit]

    #include-once

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

    Global $FF_CON_DELAY
    ;===============================================================================
    Func _FFConnect( ByRef $IP, $port=4242)
    TCPStartup()

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

    Local $Socket = TCPConnect($IP, $port)
    $FF_CON_DELAY = Ping($IP)+100

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

    If @error Then
    MsgBox(0,"Error","_FFConnect:\nConnection error.")
    Return -1
    EndIf

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

    If __FFWaitForRepl($Socket) Then
    Return $Socket
    Else
    Return -1
    EndIf
    EndFunc
    ;===============================================================================
    Func _FFDisConnect(ByRef $Socket)
    If Not $Socket = -1 Then
    TCPCloseSocket($Socket)
    EndIf
    TCPShutdown()
    EndFunc
    ;===============================================================================
    Func _FFNavigate( ByRef $Socket, $sURL, $iDelay=20000)
    Local $Ret=0, $err=0

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

    TCPSend($Socket, 'content.document.location.href="' & $sURL & '"' & @CRLF)
    If Not @error Then
    $Ret = __FFWaitForRepl($Socket)
    Else
    $err=1
    EndIf
    sleep($iDelay)

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

    SetError($err)
    Return $Ret
    EndFunc
    ;===============================================================================
    Func _FFReadHTML( ByRef $Socket )
    Local $sRet="", $recv, $err=0, $i=0

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

    TCPSend($Socket, "content.document.documentElement.innerHTML" & @CRLF)
    If not @error Then
    sleep($FF_CON_DELAY)

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

    While 1
    $recv= TCPRecv($Socket, 4096)
    If @error Then
    $err = 1
    ExitLoop
    EndIf
    $sRet &= $recv
    $i += 1
    If $i > 1000 Or $recv = "" Then ExitLoop
    Wend
    Else
    $err=1
    EndIf

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

    SetError($err)
    Return $sRet
    EndFunc
    ;===============================================================================
    Func __FFWaitForRepl(ByRef $Socket)
    Local $recv, $Ret=1, $i=0

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

    While 1
    sleep($FF_CON_DELAY)
    $recv = TCPRecv($Socket, 4096)
    If @error Then
    $Ret = 0
    ExitLoop
    EndIf
    If StringInStr($recv,"repl>") Then ExitLoop
    $i += 1
    If $i > 10 Then ExitLoop
    Wend

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

    Return $Ret

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

    EndFunc
    ;===============================================================================

    [/autoit]

    Einmal editiert, zuletzt von Stilgar (18. August 2007 um 20:12)

  • dankö
    deins funzt :D

    werde mich auch dran setzen und funktionen schreiben

    Dieser Beitrag wurde 9521 mal editiert, zum letzten Mal von Blubkuh: Morgen, 02:28.

    [autoit]

    If Not $Elephant Then $Irelephant = True

    [/autoit]
  • Ja das wäre schön :)
    Muß nur noch die aktuellen etwas überarbeiten, die sind noch nicht ganz stabil.
    Vor allem das Warten bis die Seite geladen ist macht mir etwas Kopfzerbrechen ...

    Die _FFAction (_IEAction) und _FFQuit (_IEQuit) habe ich schon fast fertig.
    Als nächstes werde ich mich mal daran machen, die einzelnen Elemente auszulesen.

    Grüße
    Stilgar

  • sehr geil, ist es dann auch vlt möglich _FFCreateEmbedded zu erstellen? dann wär endlich dieser IE scheiß weg!


    Walle

    Flensburg ist wie Payback - wenn man 18 Punkte hat bekommt man ein Fahrrad.

  • Sooo
    ich denk ma das viele Leute Wünsche und Ideen haben, was man alles einbauen könnte, also postet hier eure Vorschläge und unter anderem ich und Stilgar werden versuchen diese umzusetzen

    Dieser Beitrag wurde 9521 mal editiert, zum letzten Mal von Blubkuh: Morgen, 02:28.

    [autoit]

    If Not $Elephant Then $Irelephant = True

    [/autoit]
  • Aktueller Stand:

    Demo (funktioniert nur wenn FF in C:\Programme\Mozilla Firefox\firefox.exe ist, wird logischerweise noch geändert :D )

    Starten und zuschauen:

    Spoiler anzeigen
    [autoit]

    #region Includes
    #include <Array.au3>
    #include "FF.au3"
    #endregion Includes
    ;===============================================================================
    Dim $IP = "127.0.0.1"
    Dim $HTML
    ;===============================================================================
    $Socket = _FFStart($IP) ; FireFox starten und verbinden
    ; (Port optional als 2 Parameter)

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

    If $Socket <> -1 Then
    sleep(3000)
    _FFNavigate($Socket, "http://www.autoit.de",6000) ; Adresse anwählen
    ; die 6000 sind momentan noch eine simple Verzögerung bis die Seite
    ; geladen ist
    _FFNavigate($Socket, "about:",6000)
    sleep(3000)
    _FFAction($Socket,"back")
    sleep(3000)
    _FFAction($Socket,"forward")
    sleep(3000)
    _FFAction($Socket,"minimize")
    sleep(3000)
    _FFAction($Socket,"maximize")
    sleep(3000)
    _FFAction($Socket,"restore")
    sleep(3000)
    _FFAction($Socket,"fullscreen","true")
    sleep(3000)
    _FFAction($Socket,"fullscreen","false")
    sleep(3000)
    _FFAction($Socket,"back")
    sleep(3000)
    _ArrayDisplay( StringSplit(_FFReadHTML($Socket),@CRLF) )
    _FFAction($Socket,"alert","Ende der Vorfuehrung")
    _FFQuit($Socket) ; FF beenden

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

    Else
    MsgBox(16, "Error", "Connection error")
    EndIf

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

    Exit

    [/autoit]

    die aktuelle FF.au3:

    Spoiler anzeigen
    [autoit]

    #include-once

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

    Global $FF_CON_DELAY
    ;ToDo
    ; bessere Auswertung der Rückgaben von MozRepl
    ; Fehlerroutinen
    ; _FFReadHTML + Tab-Selection
    ; _FFTabSelectByName(ByRef $Socket, $sName) or
    ; _FFTabSelectByIndes(ByRef $Socket, $iIndex)
    ; _FFGetElementByName
    ; _FFGetElementByID
    ; _FFClick...
    ; _FFForm ...
    ; _FFTable ...
    ;===============================================================================
    Func _FFStart(ByRef $IP, $port=4242)
    If Not __FFIsIP($IP) And Not __FFIsPort($port) Then Return -1

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

    ; so nicht :) !!!!!!!!!!!!!!!!!
    Run('"C:\Programme\Mozilla Firefox\firefox.exe" -repl')
    If @error Then Return -1

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

    While 1
    Sleep(1000)
    If ProcessExists("firefox.exe") Then ExitLoop
    Wend

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

    If Not @error Then
    Sleep(1000)
    Return _FFConnect($IP,$port)
    Else
    Return -1
    EndIf

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

    EndFunc
    ;===============================================================================
    Func _FFAction(ByRef $Socket, $sAction, $sOption="")
    If Not __FFIsSocket($Socket) Then Return 0

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

    $sAction = StringLower($sAction)
    $sOpt = StringLower($sOption)
    Select
    Case $sAction = "minimize"
    $sCommand = "minimize()"
    Case $sAction = "maximize"
    $sCommand = "maximize()"
    Case $sAction = "restore"
    $sCommand = "restore()"
    Case $sAction ="back"
    $sCommand = "content.back()"
    Case $sAction ="home"
    $sCommand = "content.home()"
    Case $sAction ="forward"
    $sCommand = "content.forward()"
    Case $sAction ="stop"
    $sCommand = "content.stop()"
    Case $sAction ="print"
    $sCommand = "content.print()"
    Case $sAction ="search" And $sOption <> ""
    ContinueCase
    Case $sAction ="find" And $sOption <> ""
    $sCommand = 'content.find("' & $sOption &'")'
    Case $sAction ="search"
    ContinueCase
    Case $sAction ="find"
    $sCommand = "content.find()"
    Case $sAction ="fullscreen" And $sOpt = "true"
    $sCommand = "fullScreen=true"
    Case $sAction ="fullscreen" And $sOpt = "false"
    $sCommand = "fullScreen=false"
    Case $sAction ="alert" And $sOption <> ""
    $sCommand = 'alert("'& $sOption &'")'
    Case Else
    MsgBox(0,"Error _FFAction","Action " & $sAction & " not found!")
    Return 0
    EndSelect

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

    TCPSend($Socket, $sCommand & @CRLF)
    If Not @error Then
    Return __FFWaitForRepl($Socket)
    Else
    Return 0
    EndIf
    EndFunc
    ;===============================================================================
    Func _FFQuit(ByRef $Socket)
    If Not __FFIsSocket($Socket) Then Return 0

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

    TCPSend($Socket, "close()" & @CRLF)
    If Not @error Then
    _FFDisConnect($Socket)
    Return 1
    Else
    Return 0
    EndIf

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

    EndFunc
    ;===============================================================================
    Func __FFWaitForRepl(ByRef $Socket)
    Local $recv, $Ret = 1, $i = 0

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

    If Not __FFIsSocket($Socket) Then Return 0

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

    While 1
    Sleep($FF_CON_DELAY)
    $recv = TCPRecv($Socket, 4096)
    If @error Then
    $Ret = 0
    ExitLoop
    EndIf
    If StringInStr($recv, "repl>") Then ExitLoop
    $i += 1
    If $i > 10 Then ExitLoop
    Wend

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

    Return $Ret

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

    EndFunc ;==>__FFWaitForRepl
    ;===============================================================================
    Func _FFConnect(ByRef $IP, $port = 4242)
    If Not __FFIsIP($IP) And Not __FFIsPort($port) Then Return -1

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

    TCPStartup()

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

    Local $Socket = TCPConnect($IP, $port)
    $FF_CON_DELAY = Ping($IP) + 100

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

    If @error Then
    MsgBox(0, "Error", "_FFConnect:\nConnection error.")
    Return -1
    EndIf

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

    If __FFWaitForRepl($Socket) Then
    Return $Socket
    Else
    Return -1
    EndIf
    EndFunc ;==>_FFConnect
    ;===============================================================================
    Func _FFDisConnect(ByRef $Socket)
    If __FFIsSocket($Socket) Then
    TCPCloseSocket($Socket)
    EndIf
    TCPShutdown()
    EndFunc ;==>_FFDisConnect
    ;===============================================================================
    Func _FFNavigate(ByRef $Socket, $sURL, $iDelay = 20000)
    Local $Ret = 0, $err = 0

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

    If Not __FFIsSocket($Socket) And Not __FFIsURL($sURL) Then Return 0

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

    TCPSend($Socket, 'content.document.location.href="' & $sURL & '"' & @CRLF)
    If Not @error Then
    $Ret = __FFWaitForRepl($Socket)
    Else
    $err = 1
    EndIf
    Sleep($iDelay)

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

    SetError($err)
    Return $Ret
    EndFunc ;==>_FFNavigate
    ;===============================================================================
    Func _FFReadHTML(ByRef $Socket)
    Local $sRet = "", $recv, $err = 0, $i = 0

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

    If Not __FFIsSocket($Socket) Then Return 0

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

    TCPSend($Socket, "content.document.documentElement.innerHTML" & @CRLF)
    If Not @error Then
    Sleep($FF_CON_DELAY)

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

    While 1
    $recv = TCPRecv($Socket, 4096)
    If @error Then
    $err = 1
    ExitLoop
    EndIf
    $sRet &= $recv
    $i += 1
    If $i > 1000 Or $recv = "" Then ExitLoop
    Wend
    Else
    $err = 1
    EndIf

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

    SetError($err)
    Return $sRet
    EndFunc ;==>_FFReadHTML
    ;===============================================================================
    Func __FFIsSocket(ByRef $Socket)
    If $Socket <> -1 And IsInt($Socket) Then
    Return true
    Else
    Return false
    EndIf
    EndFunc
    ;===============================================================================
    Func __FFIsIP(ByRef $IP)
    If StringRegExp($IP,"\A(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])\z") Then
    Return true
    Else
    Return false
    EndIf
    EndFunc
    ;===============================================================================
    Func __FFIsPort(ByRef $port)
    If IsInt($port) And $port >= 1024 And $port <= 65535 Then
    Return true
    Else
    Return False
    EndIf
    EndFunc
    ;===============================================================================
    Func __FFIsURL(ByRef $URL)
    If $URL = "about:" Or StringRegExp($URL,"\A(http://|https://|ftp://)([a-zA-Z0-9]+\.[a-zA-Z0-9\-]+|[a-zA-Z0-9\-]+)\.[a-zA-Z\.]{2,6}(/[a-zA-Z0-9\.\?=/#%&\+-]+|/|)\z") Then
    Return true
    Else
    Return false
    EndIf
    EndFunc

    [/autoit]

    2 Mal editiert, zuletzt von Stilgar (19. August 2007 um 00:05)

  • Fehler in Zeile 82 der FF.au3


    Return = 0

    muss so sein


    Return 0

    :)


    EDIT: stilgar adde mich ma in icq pls :)

    Dieser Beitrag wurde 9521 mal editiert, zum letzten Mal von Blubkuh: Morgen, 02:28.

    [autoit]

    If Not $Elephant Then $Irelephant = True

    [/autoit]

    Einmal editiert, zuletzt von Blubkuh (19. August 2007 um 00:02)

  • Ich wünsche mir ein _FFCreateEmbedded. sprich ein Fenster welches eine Seite in einer GUI darstellen kann, das basierte bisher immer auf der IE.au3.

    Damit verbunden wäre auch die Funktion _FFNavigate, die also zu einer Seite navigiert.


    Man das ist cool, ist ja hier wie bei "WÜNSCH DIR WAS" :D


    Walle

    Flensburg ist wie Payback - wenn man 18 Punkte hat bekommt man ein Fahrrad.

  • Hallo,
    _FFCreateEmbedded wird ganz zuletzt kommen, falls es überhaupt geht (hab irgendwo mal ne dll dafür gesehehn - glaub ich ?(:D )


    Aktueller Stand an Funktionen:

    * _FFAction: führt folgende Aktionen aus:
    - minimize
    - maximize
    - restore
    - back
    - forward
    - home
    - stop
    - print (dialog)
    - search / find (mit/ohne Dialog)
    - fullscreeen true /false
    - alert (diese JavaScript MsgBox)
    * _FFConnect: Verbindet sich mit FF und einem laufenden MozRepl
    * _FFDisConnect: Baut die Verbindung wieder ab
    * _FFLoadWait: Wartet bis die Seite vollständig geladen ist
    * _FFNavigate: Ruft die angegebene Seite auf
    * _FFQuit: Beendet die Verbindung zu MozRepl und den FF
    * _FFReadHTML: Ließt den HTML Quelltext der aktuellen Seite
    * _FFStart: Startet FF mit aktiven MozRepl
    * und ein paar Hilfsfunktionen

    Beispiel:

    Spoiler anzeigen
    [autoit]

    #region Includes
    #include <Array.au3>
    #include "FF.au3"
    #endregion Includes
    ;===============================================================================
    Dim $IP = "127.0.0.1"
    ;===============================================================================
    $Socket = _FFStart($IP) ; FireFox starten und verbinden
    ; (Port optional als 2 Parameter)

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

    If $Socket <> -1 Then
    _FFNavigate($Socket, "http://www.autoit.de")
    sleep(10000)
    _FFNavigate($Socket, "about:")
    sleep(3000)
    _FFAction($Socket,"back")
    sleep(3000)
    _FFAction($Socket,"forward")
    sleep(3000)
    _FFAction($Socket,"minimize")
    sleep(3000)
    _FFAction($Socket,"maximize")
    sleep(3000)
    _FFAction($Socket,"restore")
    sleep(3000)
    _FFAction($Socket,"fullscreen","true")
    sleep(3000)
    _FFAction($Socket,"fullscreen","false")
    sleep(3000)
    _FFAction($Socket,"back")
    sleep(3000)
    _ArrayDisplay( StringSplit(_FFReadHTML($Socket),@CRLF) )
    _FFAction($Socket,"alert","Ende der Vorfuehrung")
    _FFQuit($Socket) ; FF beenden

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

    Else
    MsgBox(16, "Error", "Connection error")
    EndIf

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

    Exit

    [/autoit]

    FF.au3:

    Spoiler anzeigen
    [autoit]

    Global Const $__DEBUG__ = False ;#__DEBUG__

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

    #include-once

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

    ;ToDo
    ; bessere Auswertung der Rückgaben von MozRepl
    ; Fehlerroutine
    ; Aktionen: SelectAll, Copy
    ; _FFReadHTML + Tab-Selection
    ; _FFTabSelectByName(ByRef $Socket, $sName) or
    ; _FFTabSelectByIndes(ByRef $Socket, $iIndex)
    ; _FFGetElementByName
    ; _FFGetElementByID
    ; _FFClick...
    ; _FFForm ...
    ; _FFTable ...

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

    Global $FF_CON_DELAY

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

    ;===============================================================================
    Func _FFAction(ByRef $Socket, $sAction, $sOption = "", $bWait=true)
    If Not __FFIsSocket($Socket) Then Return 0
    Local $sCommand
    If $__DEBUG__ Then ConsoleWrite("_FFAction " & $sAction & @CRLF ) ;#__DEBUG__

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

    $sAction = StringLower($sAction)
    Local $sOpt = StringLower($sOption)
    Select
    Case $sAction = "minimize"
    $sCommand = "minimize()"
    Case $sAction = "maximize"
    $sCommand = "maximize()"
    Case $sAction = "restore"
    $sCommand = "restore()"
    Case $sAction = "back"
    $sCommand = "content.back()"
    Case $sAction = "home"
    $sCommand = "content.home()"
    Case $sAction = "forward"
    $sCommand = "content.forward()"
    Case $sAction = "stop"
    $sCommand = "content.stop()"
    Case $sAction = "print"
    $sCommand = "content.print()"
    Case $sAction = "search" And $sOption <> ""
    ContinueCase
    Case $sAction = "find" And $sOption <> ""
    $sCommand = 'content.find("' & $sOption & '")'
    Case $sAction = "search"
    ContinueCase
    Case $sAction = "find"
    $sCommand = "content.find()"
    Case $sAction = "fullscreen" And $sOpt = "true"
    $sCommand = "fullScreen=true"
    Case $sAction = "fullscreen" And $sOpt = "false"
    $sCommand = "fullScreen=false"
    Case $sAction = "alert" And $sOption <> ""
    $sCommand = 'alert("' & $sOption & '")'
    Case Else
    MsgBox(0, "Error _FFAction", "Action " & $sAction & " not found!")
    Return 0
    EndSelect

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

    TCPSend($Socket, $sCommand & @CRLF)
    If Not @error Then
    Return __FFWaitForRepl($Socket)
    Else
    Return 0
    EndIf

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

    EndFunc ;==>_FFAction
    ;===============================================================================
    Func _FFConnect(ByRef $IP, $port = 4242)
    If $__DEBUG__ Then ConsoleWrite("_FFConnect" & @CRLF ) ;#__DEBUG__
    If Not __FFIsIP($IP) And Not __FFIsPort($port) Then Return -1

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

    TCPStartup()

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

    Local $Socket = TCPConnect($IP, $port)
    $FF_CON_DELAY = Ping($IP) + 30
    If $__DEBUG__ Then ConsoleWrite("_FFConnect DELAY:" & $FF_CON_DELAY & @CRLF ) ;#__DEBUG__

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

    If @error Then
    MsgBox(0, "Error", "_FFConnect:\nConnection error.")
    Return -1
    EndIf

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

    If __FFWaitForRepl($Socket) Then
    Return $Socket
    Else
    Return -1
    EndIf
    EndFunc ;==>_FFConnect
    ;===============================================================================
    Func _FFDisConnect(ByRef $Socket)
    If __FFIsSocket($Socket) Then
    TCPCloseSocket($Socket)
    EndIf
    TCPShutdown()
    EndFunc ;==>_FFDisConnect
    ;===============================================================================
    Func _FFLoadWait(ByRef $Socket, $iDelay = 0, $iTimeOut = 60000)
    If $__DEBUG__ Then ConsoleWrite("_FFLoadWait" & @CRLF ) ;#__DEBUG__
    If Not __FFIsSocket($Socket) Then Return 0
    Local $recv

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

    Sleep($iDelay)

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

    Local $TimeOutTimer = TimerInit()
    While 1
    Sleep($FF_CON_DELAY)
    TCPSend($Socket, "document.getElementById('statusbar-icon').value" & @CRLF)
    If @error Then Return 0
    Sleep($FF_CON_DELAY)
    $recv = TCPRecv($Socket, 4096)
    If @error Then Return 0
    $recv = StringStripWS(StringReplace($recv,"repl>",""),8)
    If $recv = 100 Then ExitLoop
    If (TimerDiff($TimeOutTimer) > $iTimeOut) Then ExitLoop
    Wend

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

    Return 1

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

    EndFunc ;==>_FFLoadWait
    ;===============================================================================
    Func _FFNavigate(ByRef $Socket, $sURL, $bWait = True)
    If Not __FFIsSocket($Socket) And Not __FFIsURL($sURL) Then Return 0

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

    Local $Ret = 0, $err = 0

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

    If $__DEBUG__ Then ConsoleWrite("_FFNavigate" & @CRLF ) ;#__DEBUG__

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

    Sleep($FF_CON_DELAY)
    TCPSend($Socket, 'content.document.location.href="' & $sURL & '"' & @CRLF)
    If Not @error Then
    $Ret = __FFWaitForRepl($Socket)
    Else
    $err = 1
    EndIf

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

    If $bWait Then _FFLoadWait($Socket)

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

    SetError($err)
    Return $Ret
    EndFunc ;==>_FFNavigate
    ;===============================================================================
    Func _FFQuit(ByRef $Socket)
    If Not __FFIsSocket($Socket) Then Return 0

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

    TCPSend($Socket, "close()" & @CRLF)
    If Not @error Then
    _FFDisConnect($Socket)
    Return 1
    Else
    Return 0
    EndIf

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

    EndFunc ;==>_FFQuit
    ;===============================================================================
    Func _FFReadHTML(ByRef $Socket)
    Local $sRet = "", $recv, $err = 0, $i = 0

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

    If Not __FFIsSocket($Socket) Then Return 0

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

    TCPSend($Socket, "content.document.documentElement.innerHTML" & @CRLF)
    If Not @error Then
    Sleep($FF_CON_DELAY)

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

    While 1
    $recv = TCPRecv($Socket, 4096)
    If @error Then
    $err = 1
    ExitLoop
    EndIf
    $sRet &= $recv
    $i += 1
    If $i > 1000 Or $recv = "" Then ExitLoop
    Wend
    Else
    $err = 1
    EndIf

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

    SetError($err)
    Return $sRet
    EndFunc ;==>_FFReadHTML
    ;===============================================================================
    Func _FFStart(ByRef $IP, $port = 4242)
    If $__DEBUG__ Then ConsoleWrite("_FFStart" & @CRLF ) ;#__DEBUG__
    If Not __FFIsIP($IP) And Not __FFIsPort($port) Then Return -1

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

    ; so nicht :) !!!!!!!!!!!!!!!!!
    Run('"C:\Programme\Mozilla Firefox\firefox.exe" -repl')
    If @error Then Return -1

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

    Local $TimeOutTimer = TimerInit()
    While 1
    Sleep(1000)
    If ProcessExists("firefox.exe") Then ExitLoop
    If (TimerDiff($TimeOutTimer) > 60000) Then ExitLoop
    Wend

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

    If Not @error Then
    Sleep(2000)
    Return _FFConnect($IP, $port)
    Else
    Return -1
    EndIf

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

    EndFunc ;==>_FFStart
    ;===============================================================================
    ;===============================================================================
    Func __FFIsIP(ByRef $IP)
    If StringRegExp($IP, "\A(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])\z") Then
    Return True
    Else
    Return False
    EndIf
    EndFunc ;==>__FFIsIP
    ;===============================================================================
    Func __FFIsPort(ByRef $port)
    If IsInt($port) And $port >= 1024 And $port <= 65535 Then
    Return True
    Else
    Return False
    EndIf
    EndFunc ;==>__FFIsPort
    ;===============================================================================
    Func __FFIsSocket(ByRef $Socket)
    If $Socket <> -1 And IsInt($Socket) Then
    Return True
    Else
    Return False
    EndIf
    EndFunc ;==>__FFIsSocket
    ;===============================================================================
    Func __FFIsURL(ByRef $URL)
    If $URL = "about:" Or StringRegExp($URL, "\A(http://|https://|ftp://)([a-zA-Z0-9]+\.[a-zA-Z0-9\-]+|[a-zA-Z0-9\-]+)\.[a-zA-Z\.]{2,6}(/[a-zA-Z0-9\.\?=/#%&\+-]+|/|)\z") Then
    Return True
    Else
    Return False
    EndIf
    EndFunc ;==>__FFIsURL
    ;===============================================================================
    Func __FFWaitForRepl(ByRef $Socket, $iTimeOut = 3000)
    If $__DEBUG__ Then ConsoleWrite("_FFWaitForRepl" & @CRLF ) ;#__DEBUG__
    If Not __FFIsSocket($Socket) Then Return 0

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

    Local $recv, $Ret = 1
    Local $TimeOutTimer = TimerInit()

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

    While 1
    Sleep($FF_CON_DELAY)
    $recv = TCPRecv($Socket, 4096)
    If @error Then
    $Ret = 0
    ExitLoop
    EndIf
    If $__DEBUG__ Then ConsoleWrite("_FFWaitForRepl RECV:" & $recv & @CRLF ) ;#__DEBUG__
    If StringInStr($recv, "repl>") Then ExitLoop
    If (TimerDiff($TimeOutTimer) > $iTimeOut) Then Return 0
    Wend

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

    Return $Ret

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

    EndFunc ;==>__FFWaitForRepl

    [/autoit]

    Leg ich heute mal noch irgendwo ins Netz, wird sich eh täglich ändern :D

    Viele Grüße
    Stilgar

    Einmal editiert, zuletzt von Stilgar (19. August 2007 um 11:45)

  • schade, wenn das _FFCreateEmbedded nicht geht :(

    Naja ihr schafft das (hoffentlich) schon


    Walle

    Flensburg ist wie Payback - wenn man 18 Punkte hat bekommt man ein Fahrrad.

  • Wieder gefunden!

    Mozilla ActiveX Project

    Habs noch nicht probiert - ist von 2005 und für FF 1.5.

    Und hier ein Beispiel wie man es in AutoIt nutzt:
    http://www.autoitscript.com/forum/index.php?showtopic=20450
    man erstellt einfach ein Mozilla.Browser Objekt und steuert es mit der IE.au3

    Was einem natürlich nicht alle Möglichkeiten wie MozRepl bietet, da man dort die komplette Kontrolle über alle DOM/XUL Elemente hat :)

    Viele Grüße
    Stilgar


    [EDIT]
    Hier gibts immer die aktuellste Version:
    http://thorsten-willert.de/Software/AutoIt/

    Einmal editiert, zuletzt von Stilgar (19. August 2007 um 14:57)

  • cool wäre wenn das irgendwann mal direkt mit in die AutoIt Version eingebunden wird


    Walle

    Flensburg ist wie Payback - wenn man 18 Punkte hat bekommt man ein Fahrrad.