FireFox und _FFConnect()

  • Hallo alle miteinander,

    ich bräuchte wiedereinmal eure Hilfe bei einem kleinem Problem.

    Spoiler anzeigen
    [autoit]

    #include <FFEx.au3>
    _FFStart("www.gmx.de","default",2)
    _FFLinkClick("Kostenlos anmelden!", "text")
    _FFConnect() ;Warum ist dieser Schritt nötig???
    _FFImageClick("kostenlos anmelden", "alt")
    _FFConnect() ;Warum ist dieser Schritt nötig???
    _FFFormRadioButton("Herr", 0, "value")

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

    _FFDisConnect()

    [/autoit]

    Wie schon dem Quelltext zu entnehmen, frage ich mich warum das ganze nur mit den zusätzlichen Connect-Schritten funktioniert.
    Lasse ich diese Schritte aus, bleibt das Script an dieser Stelle hängen.

    Wünsche, Vorschläge, Meinungen? :D

    Gruß Spunky

  • Hi,

    evtl liegt es daran das du die falsche #include datei nimmst.

    Versuch es mal mit FF.au3. Diese Datei muss natürlich dann in dem Include Ordner existieren.

    Gruß
    Daniel

  • Die FF.au3 wird schon in der FFEx.au3 eingebunden.
    Zur Sicherheit habe ich aber auch nochmal versucht nur die FF.au3 einzubinden. Leider ohne Erfolg. :(

  • Nunja, immerhin hat Stilgar nen Workaround beschrieben, der so wie es ausschaut tadellos funktioniert.

    Und um nicht immer die Zeile "_FFCmd("FFau3.WCD=window.content.top.document;")" im Script schrieben zu müssen, hab ich die
    Funktion _FFLoadWait in der FF.au3 geändert:

    Spoiler anzeigen
    [autoit]


    Func _FFLoadWait($iTimeOut = $_FF_LOADWAIT_TIMEOUT, $bStop = $_FF_LOADWAIT_STOP)
    Local Const $sFuncName = "_FFLoadWait"

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

    Local $iLoadingTime = 0
    If $iTimeOut < 1000 Then $iTimeOut = 1000

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

    Local $bTrace = $_FF_COM_TRACE
    $_FF_COM_TRACE = False

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

    If Not $_FF_COM_TRACE Then ConsoleWrite("_FFLoadWait: ")

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

    Local $TimeOutTimer = TimerInit()

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

    While TimerDiff($TimeOutTimer) < $iTimeOut
    If Not $_FF_COM_TRACE Then ConsoleWrite(".")
    If _FFCmd("FFau3.tmp=window.getBrowser().webProgress;FFau3.tmp.isLoadingDocument && FFau3.tmp.busyFlags ? false: true;") Then
    $iLoadingTime = Round(TimerDiff($TimeOutTimer))
    ConsoleWrite(" loaded in " & $iLoadingTime & "ms" & @CRLF)
    Sleep($_FF_CON_DELAY * 1.4)
    $_FF_COM_TRACE = $bTrace
    _FFCmd("FFau3.WCD=window.content.top.document;"); hier ...
    Return SetError(0, $iLoadingTime - $_FF_CON_DELAY * 1.4, 1)
    EndIf
    Sleep(250)
    WEnd

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

    If $bStop Then _FFAction("stop")

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

    $_FF_COM_TRACE = $bTrace
    ConsoleWrite(@CRLF & @CRLF)
    _FFCmd("FFau3.WCD=window.content.top.document;");und hier ....
    Return SetError(__FFError($sFuncName, $_FF_ERROR_Timeout, "Can not check site status."), $iLoadingTime, 0)
    EndFunc ;==>_FFLoadWait

    [/autoit]

    Wobei ich mir nicht sicher bin, ob das 2. mal nötig ist, aber die paar Tastendrücke ... *schulternzuck*


    Grüße

  • Ich glaube, dass du die Funktion überhaupt nicht ändern musst. Mach einfach deine eigene:

    [autoit]

    Func _FFLoadWaitEx($iTimeOut = $_FF_LOADWAIT_TIMEOUT, $bStop = $_FF_LOADWAIT_STOP)
    Local $ret = _FFLoadWait($iTimeOut , $bStop )
    Local $err = @error, $ex = @extended
    _FFCmd("FFau3.WCD=window.content.top.document;");und hier ....
    Return SetError($err, $ex, $ret)
    EndFunc

    [/autoit]
  • Ist sicher auch ne Möglichkeit. Allerdings muss ich dann die eigene überall einfügen, dies bleibt mit so erspart.