Alternative zu _FFReadHTML gesucht

  • Hallo zusammen.

    Leider funktioniert die Funktion _FFReadHTML nicht so richtig bei mir. Es wird zwar ein Ergebnis ausgegeben, allerdings ist das nur ein Bruchteil des gesamten Quellcodes. Egal ob ich nun "body" oder "html" benutze, das Ergebnis bricht immer an der selben Stelle ab. Woran kann das liegen?

    Wenn ich den String mit StringToASCIIArray ausgebe kann man sehen dass es 4089 Zeichen sind. Der gesamte Quellcode hat 34745 Zeichen.

    Gibts andere Möglichkeiten den Quellcode auszulesen? Bevorzugt Zeilenweise in ein Array oder alternativ in eine Textdatei inklusive Beibehaltung der Formatierung (Zeilenumbrüche).

  • Hi

    probiers mal mit

    [autoit]

    _FFXPath()

    [/autoit]
    Hier ein Beispiel
    [autoit]


    #include <ff.au3>
    #include <file.au3>

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

    ;Internetseite
    $url = "www.chip.de"
    ;Datei zum speichern
    $file = "innerHTML.txt"
    ;Öffne FF
    _FFStart($url)
    ;Lese den HTML-Code, der sich zwischen <html> und </html> befindet
    $innerHTML = _FFXPath("/html", "innerHTML")
    ;Zerlege den String an Zeilenumbrüche
    $array = StringSplit($innerHTML, @CRLF, 2)
    ;Speicher das Array in eine Datei
    _FileWriteFromArray($file, $array)
    ;Programm Ende
    Exit

    [/autoit]
  • Hmm damit kommt er leider auch nur zur selben Zeile.
    Hier mal die Stelle wo er abbricht. Links der von Hand kopierte Quellcode, rechts das was AutoIT ausliest.

    [Blockierte Grafik: http://img268.imageshack.us/img268/3410/quellcodeauslesen.png]


    EDIT: Hab mal eben auch versucht den Quellcode von diesem Thread hier auszulesen. Mit _FFReadHTML und anschliessendem stringtoasciiarray ergeben sich erneut 4089 Zeichen. Da liegt der Verdacht nahe, dass hier irgendwo eine Beschränkung vorliegt.

    Einmal editiert, zuletzt von misterspeed (21. Oktober 2010 um 14:44)

  • Dann machst was falsch. Damit bekomme ich den kompletten Quelltext der Seite:

    [autoit]

    #Include <FF.au3>

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

    If _FFStart("http://autoit.de/") Then
    $sHTML = _FFReadHTML("html",7)
    If Not @error Then MsgBox(64,"Sourcecode",$sHTML)
    EndIf

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Wenn ich den String mit StringToASCIIArray ausgebe kann man sehen dass es 4089 Zeichen sind

    Mit _FFReadHTML und anschliessendem stringtoasciiarray ergeben sich erneut 4089 Zeichen.

    Sieht nach einer 4KB Beschränkung aus. Wo die her kommt? Keine Ahnung!
    [Edit1]
    Hab grad das gefunden

    Zitat

    MAX_LINESIZE 4095 Maximum size for a line of script.

    Zitat

    CMDLINEPARAM_MAXLEN 4096 Each parameter can be this many characters.


    Könnte vielleicht daran liegen.
    Aber ohne dein Skript zu sehen...
    [/Edit1]

    Welches Betriebssystem?
    Welche Autoit-Version?
    Lässt du unseren Code alleine ausführen (in eine eigene Datei speichern) oder bindest du sie in dein eigenes Skript ein?
    Erscheinen irgendwelche Meldungen in der Konsole (z.B. beim Editor SciTE).
    Wie sieht eigentlich dein Skript aus?

    Einmal editiert, zuletzt von Cyberdyne (21. Oktober 2010 um 16:54)

  • Hmm danke ich konnte den Fehler nun etwas eingrenzen, denn das Beispiel von chip funktioniert korrekt. Es funktioniert jedoch nicht mehr wenn man die url mit _FFOpenURL öffnet und dann den Quellcode ausliest. Da man innerhalb einer msgbox schlecht sehen kann ob der Quellcode komplett ist habe ich noch weitere Ausgaben hinzugefügt.

    Testscript:

    [autoit]


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

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

    $url1 = "www.google.de"
    $url2 = "http://autoit.de/index.php?page=Thread&threadID=23626"

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

    geht()
    ;gehtnicht()

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

    func geht() ;liefert kompletten Quellcode

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

    if _FFStart( $url2 ) Then

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

    $sHTML = _FFReadHTML("html")
    If Not @error Then MsgBox(64,"Sourcecode",$sHTML)

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

    ;Ausgabe Zeichenweise im Array:
    $test = StringToASCIIArray( $sHTML)
    _ArrayDisplay($test)

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

    ;Ausgabe Zeilenweise im Array:
    $test2 = StringSplit($sHTML, @CRLF, 2)
    _ArrayDisplay($test2)

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

    ;Ausgabe Zeilenweise in Datei:
    _FileWriteFromArray(@ScriptDir & "\ergebnis_von_geht.txt", $test2)
    EndIf

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

    EndFunc

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

    func gehtnicht() ; liefert nur beschnittenen Quellcode ???

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

    _FFStart( $url1 )

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

    if _FFOpenURL($url2) Then
    $sHTML = _FFReadHTML("html")
    If Not @error Then MsgBox(64,"Sourcecode",$sHTML)

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

    ;Ausgabe Zeichenweise im Array:
    $test = StringToASCIIArray( $sHTML)
    _ArrayDisplay($test)

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

    ;Ausgabe Zeilenweise im Array:
    $test2 = StringSplit($sHTML, @CRLF, 2)
    _ArrayDisplay($test2)

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

    ;Ausgabe Zeilenweise in Datei:
    _FileWriteFromArray(@ScriptDir & "\ergebnis_von_gehtnicht.txt", $test2)
    EndIf

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

    EndFunc

    [/autoit]

    Konsolen Ausgabe und die beiden erstellten Textdateien für geht() und gehtnicht() ist jeweils im Dateianhang zufinden.
    Betriebssystem ist Windows 7 x64, rest sollte der Console entnehmbar sein.

  • Betriebssystem ist Windows 7 x64


    Da ich hier mit Win XP arbeite, kann ich deinen Fehler nicht nachvollziehen.

    Dein Skript läuft bei mir, so wie es soll. Für die Funktionen

    [autoit]

    geht()
    gehtnicht()

    [/autoit]


    erhalte ich identische Ergebnisse!

    Kann dir leider nicht weiterhelfen... ?(

  • Naja ich behelf mir vorerst mal indem ich die ffstart Methode benutze, hat natürlich den Nachteil, dass ich die vorherige Login Funktion in einem separaten Fenster ausführen muss. Über alternative Möglichkeiten den Quellcode auszulesen würde ich mich daher freuen.