Elemente in HTML-Dokument finden und auslesen (DOM?)

  • Hallo AutoIt-Profis,

    ich möchte vereinfacht gesagt eine HTML-Seite laden, anhand des DOM Elemente suchen, deren Inhalt auslesen und in Variablen übernehmen.

    Ich brauche dafür weder GUI noch Fortschrittsmeldungen und dachte an eine Rückgabe als Ini oder etwas in der Art.

    Ich habe in meinem persönlichen "Hello-World-Versuch" für AutoIt mit
    Local $hp = BinaryToString(InetRead('http://example.org'), 4)
    experimentiert und schlussendlich mit StringRegExp aus $hp die Infos extrahiert.
    (Hat soweit funktioniert, ist aber für dieses Mal nicht mehr flexibel genug.)

    In CSS-Selektorensyntax (via DOM) hätte ich ungefähr das:
    #details > div.box:nth-child(2) > p:nth-child(2) > span:nth-child(2)
    Ich steige also beim (DIV-)Element mit der Id details ein und hangle mich von da an runter, andere Notation:
    #details > div[class="box box1"] > p[style="float:left;width:235px;"] > strong:first-child+span

    Welche Möglichkeiten habe ich, per DOM-Methoden (getElementbyId, getElementbyClassName etc.) Webinhalte zu filtern? Muss ich dazu IE.au3 verwenden, also eine (nicht zwingend sichtbare) IE-Instanz?
    Oder gibt es Alternativen?

    Danke für eure Tipps!

  • Wenn du selber was "basteln" willst solltest du dir mal folgende Befehle ansehen:

    _StringBetween -> Eignet sich meiner Meinung nach am besten, um Links usw. aus ner HTML-Datei rauszuoperieren (Achtung: Rückgabewert ist ein Array)
    StringRegExp -> RegEx ist allerdings eine Wissenschaft für sich. Das erfordert einiges an Einarbeitungszeit.

    Viel Erfolg...

    *edit*
    sehe gerade, dass du schon mit RegEx "rumgespielt" hast. Nuja, wie auch immer, vieleicht hilft dir _StringBetween ja weiter...

  • Danke für die Vorschläge. Ich finde _HTML_UDF ein Superprojekt, und es wäre toll, wenn ich damit wenigstens die Suche auf div#details eingrenzen könnte, nur krieg ich schon das nicht hin...

    $select = _HTML_Get($HTML, "div", "id", "details")
    (Entweder ist dieser Aufruf falsch oder die Funktion kann das nicht...)

    Und Friesel: Ja, eventuell komme ich, wenn ich mich auf den relevaten Teil (#details) der Seite beschränke, mit StringRegExp weiter. Allerdings will ich mich nicht darauf verlassen (ich bin recht fit in Regex, daran liegt es nicht).

  • Komme leider auf keinen grünen Zweig, Testausgaben: nur Nullstrings. :(

    So etwas in der Art:

    [autoit]

    #include <_HTML.au3>
    (...)
    ;sample.html liegt im gleichen Verzeichnis
    Global $HTML = FileRead("sample.html")
    $elem = _HTML_Get($HTML, "div", "id", "tellowsscore")
    MsgBox(4096, "Result", $elem, 30)

    [/autoit]


    gibt mir die Div-Id zurück (tellowscore).

    Und wie komme ich nun an den Inhalt ran? (_HTML_GetText, schon klar. Wie genau?)
    Kommt _HTML_UDF eigentlich mit UTF8 (ohne BOM) klar? Weiß das jemand?