@hunter1vv:
Die _FFWindow-Funktionen werden noch für die Suche nach Tabs umgebaut.
@Acanis:
WinActivate hat damit gar nichts zu tun. _FFConnect verbindet sich immer mit dem zuletzt geöffneten FireFox/Flock -Fenster.
@hunter1vv:
Die _FFWindow-Funktionen werden noch für die Suche nach Tabs umgebaut.
@Acanis:
WinActivate hat damit gar nichts zu tun. _FFConnect verbindet sich immer mit dem zuletzt geöffneten FireFox/Flock -Fenster.
Mit diesem XPath werden alle Input mits mit dem Typ "radio" of true gesetzt, also evtl. nicht immer die Gewünschten.
Besser wäre eine genauere Angabe wie:
[autoit]_FFXpath("//input[@type='radio' and @value='no']", "checked=true", 6)
[/autoit]
@h0scHberT:
Alternativ zu XPather kann man auch den Xpath Checker verwenden.
Eine wesentliche Änderung an _FFXPath habe ich nicht gemacht.
Habt ihr Beispiel Programme, passenden HTML-Quellcode und die Consolen-Ausgaben um das Problem zu analysieren?
Update:
- Komplett neu
Genau, die gleichen Parameter.
Zitat@Mods: mal bitte nach H&U verschieben
Nein, warum?
chip:
Dein HTML-Code enthält auch kein value-Attribut.
_FFSetValue und _FFGetValue sind nur für Inputs und Textareas interessant.
In Deinem Fall ist es aber nur ein Text innerhalb von einem Span:
[autoit]$sNews = _FFXpath("//span[@id='newsnumber']")
[/autoit]Micro und Nanosekunden wären wohl etwas übetrieben
@progandy:
Danke für den Hinweis, wollte nur die Original Funktion nicht "umbauen".
Was für eine CPU-Last? Die liegt hier während des "Sleeps" bei ziemlich genau 0%.
* _SleepEx: eine "handlichere" Version von Sleep inklusiv einem Zeitbereich von Micro-Sekunden bis zu mehreren Tagen
+ verwendet die Funktion _HighPrecisionSleep(): ist wesentlich genauer als Sleep
* _MS: Wandelt einfache Angaben in ms um (inklusiv Laufzeitkoorektur und direkter Verwendung mit Sleep bzw. _SleepEx)
* _2MS: Direkte Rückgabe des Millisekunden Wertes
!!! Angabe von Microsekunden (was zwar wenig Sinn macht ...) nur über _SleepEx("0:0:0:0.n") möglich.
Beispiele und Funktionen:
Global $_SLEEPEX_CORR
[/autoit] [autoit][/autoit] [autoit]Main()
[/autoit] [autoit][/autoit] [autoit]Func Main()
; Laufzeitkorrektur fuer _SleepEx()
; - stimmt nicht ganz, macht aber dennoch das Ergebnis etwas genauer
_SleepEx_Corr()
ConsoleWrite($_SLEEPEX_CORR & @CRLF)
MsgBox(0,"2 Minuten, 15 Sekunden und 4 ms:", _2MS("0:2:15:4"))
[/autoit] [autoit][/autoit] [autoit]Local $t = TimerInit()
_SleepEx("00:00:02:0100") ; 2 sec, 100 ms
ConsoleWrite(TimerDiff($t) & @CRLF)
Local $t = TimerInit()
_SleepEx("0:0:0:4") ; 4 ms !!!
ConsoleWrite(TimerDiff($t) & @CRLF)
Local $t = TimerInit()
Sleep(_MS("0:0:1:20")) ; 1 sec 20 ms
ConsoleWrite(TimerDiff($t) & @CRLF)
$t = TimerInit()
_SleepEx(2) ; 2 sec
ConsoleWrite(TimerDiff($t) & @CRLF)
$t = TimerInit()
_SleepEx(1, "m") ; 1 min
ConsoleWrite(TimerDiff($t) & @CRLF)
EndFunc ;==>Main
[/autoit] [autoit][/autoit] [autoit]; #FUNCTION# ===================================================================
; Name ..........: _SleepEx_Corr
; Description ...: Correction time for _SleepEx
; AutoIt Version : V3.3.0.0
; Syntax ........: _SleepEx_Corr()
; Parameter(s): .: $iMax - Optional: (Default = 10) : max correction time
; Return Value ..: Success - Global var $_SLEEPEX_CORR
; Failure -
; Author(s) .....: Thorsten Willert
; Date ..........: Sat Feb 06 14:10:40 CET 2010
; ==============================================================================
Func _SleepEx_Corr($iMax = 10)
Local $Time = 0, $t
If Not IsDeclared("_SLEEPEX_CORR") Then Assign("_SLEEPEX_CORR", 0, 2)
For $i = 0 To 4
$t = TimerInit()
_SleepEx("00:00:00:200")
$Time += TimerDiff($t) - 200
Next
$_SLEEPEX_CORR = $Time / 5
If $_SLEEPEX_CORR > $iMax Then $_SLEEPEX_CORR = $iMax
EndFunc ;==>_SleepEx_Corr
; #FUNCTION# ===================================================================
; Name ..........: _SleepEx
; Description ...: Extended sleep
; AutoIt Version : V3.3.0.0
; Requirement(s).: _MS(), _HighPrecisionSleep()
; Syntax ........: _SleepEx($vTime[, $sBase = "s"])
; Parameter(s): .: $vTime - in ms
; $sBase - Optional: (Default = "s") :
; | d = day
; | h = hour
; | m = minute
; | s = second
; | ms = millisecond
; Return Value ..: Success - 1
; Failure - 0
; Author(s) .....: Thorsten Willert
; Date ..........: Sat Feb 06 15:15:31 CET 2010
; Example .......: Yes
; _SleepEx("0:0:2:100") ; 2 sec, 100 ms
; ==============================================================================
Func _SleepEx($vTime, $sBase = "s")
If Not IsString($vTime) And $vTime < 1 Then Return 0
$vTime = _MS($vTime, $sBase, True, False)
Local $iaMS[1]
If $vTime < 2147483647 Then
If IsDeclared("_SLEEPEX_CORR") And $vTime >= 500 Then $vTime -= $_SLEEPEX_CORR
_HighPrecisionSleep($vTime * 1000)
Return SetError(@error, 0, Not @error)
Else
Local $iTMP = $vTime
Local $t = TimerInit()
While $iTMP > 2147483647
$iTMP -= 2147483647
If IsDeclared("_SLEEPEX_CORR") Then $iTMP -= $_SLEEPEX_CORR
$iaMS[UBound($iaMS) - 1] = $iTMP * 1000
ReDim $iaMS[UBound($iaMS) + 1]
WEnd
$iaMS[0] -= TimerDiff($t) * 1000
For $i = 0 To UBound($iaMS) - 2
_HighPrecisionSleep($iaMS[$i])
If @error Then Return SetError(@error, 0, 0)
Next
Return SetError(0, 0, 1)
EndIf
EndFunc ;==>_SleepEx
; #FUNCTION# ===================================================================
; Name ..........: _MS
; Description ...: Converts to ms
; AutoIt Version : V3.3.0.0
; Syntax ........: _MS($vTime[, $sBase = "s"[, $bCorr = True[, $bSleep = True]]])
; Parameter(s): .: $vTime - int + $sBase
; | "0:0:0:0" = hour:minute:second:millisecond
; $sBase - Optional: (Default = "s") :
; | d = day
; | h = hour
; | m = minute
; | s = second
; | ms = millisecond
; $bCorr - Optional: (Default = True) : subtracts the functions runtime from the return value
; $bSleep - Optional: (Default = True) : limits the return value for sleep to 2147483647 and sets @error to 3
; Return Value ..: Success - ms
; Failure - 0 / @error = 3, 2147483647
; @ERROR - 1 = incorrect format for "0:0:0:0"
; | 2 = incorrect $sBase parameter
; | 3 = $vTime > 2147483647 if $bSleep = True
; Author(s) .....: Thorsten Willert
; Date ..........: Sat Feb 06 15:25:11 CET 2010
; Example .......: Yes
; $iMS = _MS(2) ; 2 sec
; $iMS = _MS(1, "m") ; 1 min
; ==============================================================================
Func _MS($vTime, $sBase = "s", $bCorr = True, $bSleep = True)
Local $t = TimerInit()
Local $iRet = 0
Local $aTMP
Local $aBase[4] = ["h", "d", "s", "ms"]
While 1
If StringInStr($vTime, ":") Then
$aTMP = StringSplit($vTime, ":", 2)
If @error Or UBound($aTMP) <> 4 Then Return SetError(1, 0, 0)
For $i = 0 To 3
If $aTMP[$i] Then $iRet += _MS(Int($aTMP[$i]), $aBase[$i], $bCorr)
Next
ExitLoop
Else
Switch $sBase
Case "ms"
$iRet = $vTime
ExitLoop
Case "s"
$iRet = $vTime * 1000
ExitLoop
Case "m"
$iRet = $vTime * 60000
ExitLoop
Case "h"
$iRet = $vTime * 360000
ExitLoop
Case "d"
$iRet = $vTime * 86400000
ExitLoop
Case Else
Return SetError(2, 0, 0)
EndSwitch
EndIf
WEnd
; maximum sleep time (24h)
If $bSleep And $iRet > 2147483647 Then Return SetError(3, 0, 2147483647)
If $bCorr = True Then Return $iRet - TimerDiff($t)
[/autoit] [autoit][/autoit] [autoit]Return $iRet
EndFunc ;==>_MS
Func _2MS($vTime)
Return _MS($vTime, "", False, False)
EndFunc
; #FUNCTION#;===============================================================================
;
; Name...........: _HighPrecisionSleep()
; Description ...: Sleeps down to 0.1 microseconds
; Syntax.........: _HighPrecisionSleep( $iMicroSeconds, $hDll=False)
; Parameters ....: $iMicroSeconds - Amount of microseconds to sleep
; $hDll - Can be supplied so the UDF doesn't have to re-open the dll all the time.
; Return values .: None
; Author ........: Andreas Karlsson (monoceres)
; Modified.......:
; Remarks .......: Even though this has high precision you need to take into consideration that it will take some time for autoit to call the function.
; Related .......:
; Link ..........;
; Example .......; No
;
;;==========================================================================================
Func _HighPrecisionSleep($iMicroSeconds, $hDll = False)
Local $hStruct, $bLoaded
If Not $hDll Then
$hDll = DllOpen("ntdll.dll")
If $hDLL = -1 Then Return SetError(1)
$bLoaded = True
EndIf
$hStruct = DllStructCreate("int64 time;")
DllStructSetData($hStruct, "time", -1 * ($iMicroSeconds * 10))
DllCall($hDll, "dword", "ZwDelayExecution", "int", 0, "ptr", DllStructGetPtr($hStruct))
If $bLoaded Then DllClose($hDll)
EndFunc ;==>_HighPrecisionSleep
Zu _FFImageClick:
<input ...> ist kein <img ...>
Wenn es nur ein Formular dort gibt würde auch _FFFormSubmit() reichen, oder bei mehreren Formularen mit den entsprechenden Parametern.
Oder den Umweg über _FFClick:
[autoit]_FFClick("login", "name")
[/autoit] ZitatDanke!
lags am neuen FF?
Nein, am Server.
Den Fehler kann ich leider nicht nachvollziehen.
Was passiert den damit:
#include <FF.au3>
#include <Array.au3>
_FFConnect()
$a = ControlGetPos(_FFCmd(".title"), "", "[CLASS:MozillaContentWindowClass]")
_ArrayDisplay($a)
Stimmt - man sollte nicht so viel kopieren ...
Etwas kürzer:
$t1 = TimerInit()
[/autoit] [autoit][/autoit] [autoit]While TimerDiff($t1) < 1800000 Then
; mach was ...
WEnd
Update V0.6.0.1b
- Added: Option $_FF_SEARCH_MODE works now for:
_FFLinkClick
_FFImageClick
- Added: _FFClick: Parameter $bLoadWait
- Added: _FFLoadWait: Parameter $bStop = stops pageloading after timeout
- Added: _FFAu3Option: "LoadWaitStop"
- Added: Global var $_FF_LOADWAIT_STOP
- Updated: _FFXPath: some optimizations (shorter command strings to send)
- Optimized: _FFFormOptionSelect
- Optimized: _FFLoadWait
- Fixed: _FFGetPosition: Removed error if "MozillaContentWindowClass" is not found
- Fixed: _FFSearch: Error with non-ASCII-chars
- Fixed: _FFLinkClick: Error with non-ASCII-chars
- Fixed: _FFImageClick: Error with non-ASCII-chars
- Fixed: _FFAction("alert", ...): Error with non-ASCII-chars
Grüße
Stilgar
Naja Beispiel - es gibt halt ein Array mit Koordinaten zurück.
Der einzig "sinnvolle" Einsatz der Funktion besteht nur im Ermitteln der Koordinaten eines Applets oder Flash-Zeugs auf die man klicken möchte, ansonsten ist die Funktion recht nutzlos.
Der Fehler in diesem Fall kommt auch nicht von XPath sondern bedeutet, daß das Control "MozillaContentWindowClass " in FireFox nicht gefunden wurde, in welchem eine Seite dargestellt wird.
Ich hab das mal in der neuen Test-Version etwas umgebaut.
Welche FireFox, AutoIt usw. Version benutzt Du denn?
Zu Punkt 1:
Schau Dir mal in der _HTML.au3 die Funktion __HTML_Filter an.
https://autoit.de/index.php?page=Thread&threadID=16583
(der Teil für die Entities ist aus dem englischen Forum, Aufgrund eines Fehlers im Original allerdings nicht brauchbar)
Welches Programm stürtzt ab? Deines? FireFox?
Wie sieht Dein Programm aus?
Welche Meldungen gibt es in der Console?
Was soll bei dem Parameter $iMode der leere String darstellen?
Hallo,
die Funktion benötigt als ersten Parameter die HTML-Source keine URL:
#include <_HTML.au3>
$HTML = _HTML_GetSource("http://www.thomas-walli.de/version")
MsgBox(0,"",_HTML_GetText($HTML, "body"))
--------------------
Update:
- NEU: _HTML_GetSource / liefert die HTML-Source einer URL; Scripte, Zeilenumbrüche und Tabs werden herausgefiltert.
- NEU: _HTML_GetTable / liefert ein 2-dimensionales Array mit den Daten einer Tabelle (verbundene Zellen werden nicht berücksichtigt)
- NEU: _HTML_GetText / Rückgaben können mit Hilfe von __HTML_Filter vor-verarbeitet werden.
- NEU: __HTML_Filter: Funktion zum Filtern der HTML-Sourcen:
; Parameter(s): .: $sString - String to filter
; $iMode - Optional: (Default = 0) : removes nothing
; - 0 = no filter
; - 1 = removes non ascii characters
; - 2 = removes all double whitespaces
; - 4 = removes all double linefeeds
; - 8 = removes all html-tags
; - 16 = simple html-tag / entities convertor
- _HTML_GetText: Fehler bei Angabe eines ungültigen Indizes behoben.