_HTML_UDF (Funktionen für den Umgang mit HTML-Source-Code - ohne Browser)

  • Zu Weihnachten hier noch ein paar kleine Funktionen um einfach Informationen aus HTML-Source-Code zu extrahieren:

    - _HTML_ExtractURLVar / liefert den Wert einer URL-Variablen aus einer URL
    - _HTML_Get / Universalfunktion - liefert fast alles
    - _HTML_GetAllImageSrc / liefert ein Array mit den Srcs aller Bilder
    - _HTML_GetAllLinks / liefert ein Array mit allen Links
    - _HTML_GetImageSrc / liefert die SRC eines Bildes
    - _HTML_GetLink / liefert einen Link Aufgrund eines Attributes
    - _HTML_GetSource / liefert die HTML-Source einer URL; Scripte, Zeilenumbrüche und Tabs werden herausgefiltert.
    - _HTML_GetTable / liefert ein 2-dimensionales Array mit den Daten einer Tabelle (verbundene Zellen werden nicht berücksichtigt)
    - _HTML_GetText / liefert den Text anhand von Tags und deren Attributen
    - _HTML_GetURLVar / liefert den Wert einer URL-Variablen aus der HTML-Source
    - _HTML_ImageSave / Speichert ein Bild
    - _HTML_Search / Durchsucht den sichtbaren Text

    Suchmodi umschalten:
    $_HTML_SEARCHMODE = 1 ; (0 = Compare / 1 = Substring / RegExp) (2 = Compare / 3 = Substring / String-compare)

    Beispiel:

    Spoiler anzeigen
    [autoit]


    #Region Includes
    #include <Array.au3>
    #include <_HTML.au3>
    #EndRegion Includes

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

    $_HTML_SEARCHMODE = 1

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

    Main()

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

    Func Main()

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

    Local $HTML = _HTML_GetSource("http://autoit.de/index.php?page=Portal")

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

    MsgBox(0, "", _HTML_GetURLVar($HTML, "page", "Mitglieder", "title") & @CRLF)
    MsgBox(0, "", _HTML_GetText($HTML, "div", "cont.*erCont", "class", 5) & @CRLF)
    MsgBox(0, "", _HTML_GetImageSrc($HTML, "controllcenterImage") & @CRLF)
    MsgBox(0, "", _HTML_GetLink($HTML, "loginButton") & @CRLF)

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

    Local $a = _HTML_GetAllLinks($HTML)
    _ArrayDisplay($a)

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

    $a = _HTML_GetAllLinks($HTML, '\.com')
    _ArrayDisplay($a)

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

    $a = _HTML_GetAllImageSrc($HTML, 'wcf/images/')
    _ArrayDisplay($a)
    EndFunc ;==>Main

    [/autoit]

    Die UDF:
    _HTML.au3

    23 Mal editiert, zuletzt von Stilgar (24. Februar 2011 um 22:54)

  • Update:

    - NEU: eine richtige UDF daraus gemacht
    - NEU: verschiedene Suchmodi möglich:
    $_HTML_SEARCHMODE = 1 ; (0 = Compare / 1 = Substring / RegExp) (2 = Compare / 3 = Substring / String-compare)
    - NEU: _HTML_GetText / liefert den Text anhand von Tags und deren Attributen
    - Änderung: Die Funktionen umbenannt

    Viel Spaß damit und Frohe Weihnachten!
    Stilgar

  • Update :rolleyes: :

    Hatte noch ein paar Funktionen herumliegen ...

    - _HTML_GetURLVar / liefert den Wert einer URL-Variablen aus der HTML-Source
    - _HTML_ExtractURLVar / liefert den Wert einer URL-Variablen aus einer URL

  • Update:

    Neues:
    - _HTML_GetAllImageSrc / liefert ein Array mit den Srcs aller Bilder
    - $sFilter - Parameter für _HTML_GetAllImageSrc und _HTML_GetAllLinks um die Informationen per RegEx vorab zu filtern, z.B.:

    [autoit]

    #include <inet.au3>
    #include <array.au3>
    $HTML = _InetGetSource("http://autoit.de")

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

    $a = _HTML_GetAllLinks($HTML, '.*?\.com')
    _ArrayDisplay($a)

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

    $a = _HTML_GetAllImageSrc($HTML, 'wcf/images/.*?')
    _ArrayDisplay($a)

    [/autoit]
  • Update:

    - _HTML_Search / durchsucht den sichtbaren Text nach einem Ausdruck (abhängig von $_HTML_SEARCHMODE)
    - _HTML_GetAllLinks und _HTML_GetImageSrc nun auch abhängig von $_HTML_SEARCHMODE
    - die meisten RegExe werden nun in die Console ausgegeben (zur Kontrolle falls mal was nicht klappt)

  • also so ganz schnall ich etwas nicht.

    wenn ich https://autoit.de/www.autoit.de mit dem FF aufrufe und die den html-quelltext betrachte, bekomme ich das wort "mitglieder" im quelltext hier:

    Code
    href="http://www.autoit.de/index.php?page=MembersList" title="Mitglieder"><img src="Portal - .  autoit.de  . - Das deutsche AutoIt-Forum-Dateien/membersM.png" alt=""> <span>Mitglieder</span></a></li><li><a

    wenn ich dein beispiel nehme, dann wirft er in der konsole folgendes aus:

    Code
    _HTML_Get: 
    (?i)<a(.*?)>
    (?i)title\s*=\s*("|').*?Mitglieder.*?\1
    (?i)href\s*=\s*("|')(.*?)\1

    vermutlich habe ich etwas nicht ganz geschnallt beim lesen der UDF-beschreibung/funktion, aber sollte die funktion nicht den html-code auswerfen wo sich die wörter
    befinden oder wie geht das ? - sry ich tue mich etwas schwer durch die UDFs zu steigen.

  • Die Rückgabewerte der Funktionen sind entscheidend, nicht das was in der Console steht - das sind nur Meldungen was die Funktionen gerade "machen". Ich habe das Beispiel mal auf MsgBoxen umgeändert, dann wird es offensichtlicher.

    [EDIT]
    Um es mal ausführlich zu machen:

    [autoit]

    $sURLVariable = _HTML_GetURLVar($HTML, "page", "Mitglieder", "title")

    [/autoit]


    sucht den Link mit title="Mitglieder" - also den:
    <a href="http://www.autoit.de/index.php?page=MembersList" title="Mitglieder">

    und gibt das zurück was hinter page= steht, also MembersList

    4 Mal editiert, zuletzt von Stilgar (7. Januar 2010 um 12:45)

  • Nein ich hatte nichts geändert und hier funktioniert das Beispiel auch.

    Ich habe aber jetzt nochmal ein paar Ausgaben für die Console reingeschrieben; wenn Du jetzt bitte das Beispiel und die aktualisierte UDF nochmal testen und die Ausgabe der Console hier reinstellen könntest, finde ich eher das Problem.

  • das ist die ausgabe, sieht sauber aus. wie gesagt, ich bekomme nur immer mehrere, leere msg boxen...

  • Ja klar, der Ausgabe nach wird auch nichts gefunden.

    Wird denn der HTML- Quelltext von autoit.de empfangen?

    [EDIT]:
    Ok mit AutoIt V3.3.2.0 gehts wirklich nicht mehr ... :cursing: ... das macht langsam keinen Spaß mehr ...

    [EDIT2]
    _INetGetSource scheint nicht mehr zu funktionieren ... ?(

    [EDIT3]
    Was in der Hilfe nicht steht: _INetGetSource braucht nun die vollständige Adresse, da nun InetRead verwendet wird - tolle Optimierung ...

    Beispiel oben angepaßt ...

    2 Mal editiert, zuletzt von Stilgar (8. Januar 2010 um 13:32)

  • Update:

    - _HTML_GetText kann nun auch mit leeren Parametern für $sValue und $sAttribute aufgerufen werden, damit ist ein Zugriff über den Index möglich z.B.
    Dritte td:

    [autoit]

    _HTML_GetText($sHTML, "td", "", "", 3)

    [/autoit]

    !!! Der Index ist wie bei einem Zugriff per JavaScript getElementsByTagName('td')[n]

  • Update:

    * Neue Funktion:
    _HTML_ImageSave($sHTML, $sValue, $sAttribute = "id", $iIndex = 0, $sBaseURL = "", $sDestDir = @ScriptDir, $sDestFile = "")
    $sHTML = Source
    $sValue = Value von $sAttribute (RegEx)
    $sAttribute = Attribut des Bildes (RegEx)
    $iIndex = Index
    $sBaseURL = URL der Seite, falls der Pfad in "src" nicht komplett angegeben ist. Falls ein BASE-Tag vorhanden ist, wird dieses ausgewertet.
    $sDestDir = Zielverzeichnis
    $sDestFile = Zieldatei (Default = Original-Name)

    hört sich viel an, ergibt aber z.B. folgendes:

    Spoiler anzeigen
    [autoit]

    #include <_html.au3>
    #include <inet.au3>

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

    $HTML = _INetGetSource("http://autoit.de/index.php?page=Portal")
    _HTML_ImageSave($HTML, "registerS.png", "src", 0, "www.autoit.de", "c:\\")

    [/autoit]


    * _HTML_GetAllImageSrc / _HTML_GetAllLinks geben nun Informationen in der Console aus.

  • Moin, bräuchte etwas Hilfe, bzw. nochmal ein Beispiel zu dem UDF.

    z.B. bei _HTML_GetText

    Ich habe folgendes Script mal bei mir eingebunden, aber ich bekomme keine Ausgabe in der MsgBox egal was ich in den letzten Anführungszeichen bisher versucht habe
    Kann mir jemand sagen was da reingehört?

    [autoit]

    #include-once
    #include <html.au3>

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

    $version = _HTML_GetText("www.thomas-walli.de/version", "body", "")

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

    MsgBox(1, "test", $version)

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

    Exit

    [/autoit]

    Gruß, ***

    Einmal editiert, zuletzt von theWalli (22. Mai 2010 um 14:25)

  • Hallo,

    die Funktion benötigt als ersten Parameter die HTML-Source keine URL:

    Spoiler anzeigen
    [autoit]


    #include <_HTML.au3>

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

    $HTML = _HTML_GetSource("http://www.thomas-walli.de/version")
    MsgBox(0,"",_HTML_GetText($HTML, "body"))

    [/autoit]

    --------------------

    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.