Auslesen Inhalt von lokaler Webseite in Variable

  • Hallo an alle,

    habe ein Ansatz Problem.

    Brauche einen Inhalt aus einer Web Seite die im IE offen ist.

    So sieht die Stelle in der Seite aus. Steht auf einer Seite mit etlichen Tabellen. id ist einmalig

    <INPUT onchange=SetDirty(); onkeypress=SetDirty(); id=txtName1 style="WIDTH: 100%; VISIBILITY: inherit" maxLength=50 value="Diesen Inhalt brauche ich" name=txtName1 wfDataFld="Name1">

    Danke schon mal für die Unterstützung

    Gruß

    Steffen

  • Die einfachste Lösung wäre, den Text einfach mit _StringBetween rauszufiltern.

    Ansonsten, es gibt evtl. eine _IE* - Funktion, mit der man die Value eines DOM-Elementes bekommt. Die ID des Elementes hast du ja.

    Btw., der Ausschnitt ist nichtmal valides HTML. Der Inhalt der HTML-Attribute muss in " eingeschlossen sein. (Oder wurde das mal in einer Spezifikation aufgelockert?)

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski

  • Moin!

    Wenn die Zeile einzigartig ist, bzw wenn alle Vorkommen mit value="" gefiltert werden sollen, kannst du folgenden RegEx verwenden:

    [autoit]

    $aTreffer = StringRegExp($sHtml, '(?i)value="(.+?)"', 3)

    [/autoit]


    Bedeutung:
    (?i) -> Case insensitive (Groß-/Kleinschreibung ist egal)
    value=" -> muss genau so vorkommen
    (.+?) -> ein bis unendlich viele beliebige Zeichen. Nur was in Klammern ist, kommt als Treffer ins Array
    " -> muss genau so vorkommen. Durch das ? im vorhergehenden Teil wird genau bis hier gefiltert, sonst wird das Anführugszeichen übergangen

    Du kannst den Pattern auch weiter eingrenzen, zB so:

    [autoit]

    $aTreffer = StringRegExp($sHtml, '(?i)maxLength=\d+ value="(.+?)" name=', 3)

    [/autoit]


    Bedeutung:
    (?i) -> Case insensitive (Groß-/Kleinschreibung ist egal)
    maxLength= -> muss genau so vorkommen
    \d+ -> eine beliebige Zahl mit einer bis unendlich vielen Stellen
    value=" -> muss genau so vorkommen (Leerzeichen am Anfang beachten)
    (.+?) -> ein bis unendlich viele beliebige Zeichen. Nur was in Klammern ist, kommt als Treffer ins Array
    " name= -> muss genau so vorkommen. Durch das ? im vorhergehenden Teil wird genau bis hier gefiltert, sonst wird das Anführugszeichen übergangen

    Beispiel:

    [autoit]

    #include <array.au3> ;==> nur für _ArrayDisplay benötigt, kann sonst weg

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

    $sHtml = '<INPUT onchange=SetDirty(); onkeypress=SetDirty(); id=txtName1 style="WIDTH: 100%; VISIBILITY: inherit" maxLength=50 value="Diesen Inhalt brauche ich" name=txtName1 wfDataFld="Name1">'

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

    $aTreffer = StringRegExp($sHtml, '(?i)value="(.+?)"', 3)
    _ArrayDisplay($aTreffer)

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

    $aTreffer = StringRegExp($sHtml, '(?i)maxLength=\d+ value="(.+?)" name=', 3)
    _ArrayDisplay($aTreffer)

    [/autoit]


    Wie du siehst, liefern beide Pattern das selbe Ergebnis, der zweite ist allerdings genauer. Um das weiter einzugrenzen, müsste ich den gensamten Quelltext kennen...

    ACHTUNG: Achte darauf, welche Art Anführungszeichen im Quelltext auftauchen (' oder und "). Ensprechend muss der Pattern Parameter im Befehl StringRegExp angepasst werden. Wenn also nur doppelte Anführungezeichen vorkommen (") muss der Pattern mit einem einzelnen (') umschlossen werden und umgekehrt. Sollten beide vorkommen, musst du den Pattern aufteilen...


    Sanfte Grüße :D

  • Lies von der Seite den HTML Code mit:

    [autoit]

    Local $sHTML = _IEDocReadHTML($oIE)

    [/autoit]

    Ich würde die Seite mit InetRead auslesen, dann kann man sich das Erstellen eines IE-Objektes (was letzten Endes einen IE im Hintergrund öffnet) sparen.

    So zum Beispiel:

    [autoit]

    #include <array.au3> ;==> nur für _ArrayDisplay benötigt, kann sonst weg

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

    $sSite = "Hier kommt die URL rein"
    $sHtml = BinaryToString(InetRead($sSite))

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

    $aTreffer = StringRegExp($sHtml, '(?i)maxLength=\d+ value="(.+?)" name=', 3)
    If @error Then MsgBox(0, "", "Keine Übereinstimmung gefunden!")
    _ArrayDisplay($aTreffer)

    [/autoit]


    Sanfte Grüße :D

  • Morgen erstmal an alle,

    die Seite kann ich leider nicht Separat laden da Sie dynamisch ist.

    Und ich genau den dynamischen Inhalt auslesen muss.

    Werde mal heute eure Vorschläge durch arbeiten.

    Gruß

    Steffen

  • Hallo,

    Danke erstmal noch mal für die Hilfe.

    Euren Code habe ich verstanden und getestet ist soweit klar.

    Ich muss nur an den Code des aktuell geöffneten Seite kommen. Ich kann leider nicht den Link neu öffnen.

    Den kompletten Code der Seite möchte ich hier auch nicht hochladen, da es sich um ca. 3500 Zeilen handelt. (Es ist eine Web Basierte Warenwirtschaft.)

    Ich glaube ich stehe nur auf dem Schlauch.

    Danke

    Gruß

    Steffen