Aktueller Stand:
Demo (funktioniert nur wenn FF in C:\Programme\Mozilla Firefox\firefox.exe ist, wird logischerweise noch geändert )
Starten und zuschauen:
Spoiler anzeigen
#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)
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
Else
MsgBox(16, "Error", "Connection error")
EndIf
Exit
[/autoit]die aktuelle FF.au3:
Spoiler anzeigen
#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
; so nicht !!!!!!!!!!!!!!!!!
Run('"C:\Programme\Mozilla Firefox\firefox.exe" -repl')
If @error Then Return -1
While 1
Sleep(1000)
If ProcessExists("firefox.exe") Then ExitLoop
Wend
If Not @error Then
Sleep(1000)
Return _FFConnect($IP,$port)
Else
Return -1
EndIf
EndFunc
;===============================================================================
Func _FFAction(ByRef $Socket, $sAction, $sOption="")
If Not __FFIsSocket($Socket) Then Return 0
$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
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
TCPSend($Socket, "close()" & @CRLF)
If Not @error Then
_FFDisConnect($Socket)
Return 1
Else
Return 0
EndIf
EndFunc
;===============================================================================
Func __FFWaitForRepl(ByRef $Socket)
Local $recv, $Ret = 1, $i = 0
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
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
TCPStartup()
[/autoit] [autoit][/autoit] [autoit]Local $Socket = TCPConnect($IP, $port)
$FF_CON_DELAY = Ping($IP) + 100
If @error Then
MsgBox(0, "Error", "_FFConnect:\nConnection error.")
Return -1
EndIf
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
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)
SetError($err)
Return $Ret
EndFunc ;==>_FFNavigate
;===============================================================================
Func _FFReadHTML(ByRef $Socket)
Local $sRet = "", $recv, $err = 0, $i = 0
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)
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
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