Auslesen JSP/HTML-Seite

  • Hallo Experten,

    ja, gerade erst angemeldet, aber in Wirklichkeit schon seit Tagen Dauergast auf diesen (und anderen) Seiten.
    Arbeite mich gerade mit Hochdruck in AutoIt ein und bin ziemlich begeistert.

    Bislang habe ich Makros hauptsächlich in VBA hingestümpert und konnte damit wunderbar in der IBM-iSeries-Welt rumwirken, teils mit Verweisen auf deren eigene APIs, teils auch im Rückgriff auf die Win32-API. Leider hat mich nun der Fortschritt eingeholt und eine neue Betriebssoftware auf MS SQL Server versorgt mich jetzt mit In- und Output, noch dazu nun in der Win7 x64-Umgebung und vollständig Browser-basiert via Java Server Pages.

    Langer Rede kurzer Sinn: kriege alles recht gut gebacken, Exceltabelle in Array, Array-Daten in Input-Felder, Schaltflächen und Links ansteuern und auslösen..
    .. nur das Auslesen bestimmter Texte an bestimmten Fensterpositionen gelingt mir partout nicht. Die Forms-Collection zur IE-Session liefert gerade mal genau eine Form, mit Handle aber ohne Namen und Titel, mit genau einem Inputfeld, auch ohne Namen usf. Der Zugriff geht also irgendwie ins Leere. Der gewohnte Zugriff mit Durchhangeln durchs DOM - auch mittels schleifenweisem Durchlauf durch (Sub-)Collections - will mir damit partout nicht gelingen.

    Also nun Frage: welchen Weg kann ich noch gehen? Gibt es über die IE.au3 doch noch ungeahnte Tricks oder kann z.B. die Win7-API irgendwie nutzbringend eingebunden und genutzt werden? Ziel ist schlicht, Texte von festen Fenster-Positionen auszulesen, um zu wissen, wo im Programmbaum man gerade steht oder aber z.B., ob ein Click-/Post-/Send-/Request-Prozeß (schon) zu Änderungen geführt hat usf.

    Kann mich da bitte mal einer mit der Nase auf einen erfolgversprechenden Weg stoßen? Gerne auch ganz allgemein, ich fuchse mich schon selbstätig in die dann nötigen Details rein, allein, mir fehlt zur Zeit schlicht völlig die Orientierung. Ist halt alles so furchtbar neu für mich. 8|

    B.t.w.: Software ist geil! Und dieses Forum (mittels Tut, FAQ und Suche) hat mir schon massiv geholfen - Danke dafür!
    G'Nacht!

    Einmal editiert, zuletzt von CMeister (25. Juli 2014 um 20:42)

    • Offizieller Beitrag

    Schwer zu sagen, wenn man die Seite nicht kennt. Ist die Seite öffentlich zugänglich?
    Oder gibt es eine Beispielseite?

    Außer den IE-Funktionen gibt es auch noch die Möglichkeit die Seite mit InetRead zu holen und dann direkt in den HTML-Daten zu lesen.
    Aber, wie gesagt, ohne zu wissen was Du auslesen willst, kann man nur schwer helfen.

  • Hallo,

    Danke für's Mitdenken! Der Weg wäre klasse: das HTML rausziehen, nach festem Text (z.B. der Art "Datenstamm:") suchen und dahinter stehenden Parameterwert (also dann z.B. "Ist-Werte Vorjahr konsolidiert") ablesen. Mit regulären Ausdrücken ist das ja gut machbar.

    Tatsächlich handelt es sich um eine kommerzielle Anwendung (nicht online) auf Basis von Java Server Pages - also jeweils zusammengfrickeltes HTML, in diversen Containern, mit CSS etc. angereichert. Dazu Hunderte von verschiedenen <div class="irgendwas"> ineinander verschachtelt usf.

    Interessant übrigens: egal, welche (unterschiedliche) URLs aus Links und Buttons einer aktiven Seite ich dem InetRead vorlege, es liefert immer den HTML-Code der (längst nicht mehr sichtbaren) Login-Seite zurück. Die URLs sehen in etwa so aus:
    ;Local $sURL="http://anwendungsname.servername.local/erp/ttpiLFW.JSP#ttpistdaadr"

    ;Local $sURL="http://anwendungsname.servername.local/erp/ttpistdaadr.jsp?ttpistdaadr_TID=TID.07177C31F11399EF6...{rattenlanger Schwanz}"

    ;Local $sURL="http://anwendungsname.servername.local/erp/ttpistdtshdr.jsp?ttpistdtshdr_TID=TID.BA2BF2DAC2B39772384A8DE8&ACTION=CALL&krdtab=1&primaryKeys=,KLURKO...{endloser Buchstabensalat}"

    Im Moment helfen mir weder die Development-Tools des IE noch des Firefox großartig weiter.
    Ich schätze, da werden bei requests immer nur Teile/Module des bestehenden HTML vor Ort in der Anzeige ausgetauscht, iFrames sind ja auch enthalten - ein Abgreifen der gesamten, dargestellten Seite ist so gar nicht möglich, man kommt an kein konsistentes "Gebäude" der gesamten dargestellten Webseite. Der jeweils sichtbare Text (nach dem ich ja suchen will) ist teilweise so gar nicht direkt im HTML zu lesen, sondern resultiert seinerseits wieder aus einem <div> mit weiterverweisendem Link auf eine bestimmte Server-Adresse.

    So kann das wohl nichts werden, oder?

    P.S. Das einzige, was mir noch einfiele, wäre wohl eine Art Kopie des dargestellten Bildschirms, quasi via API-Funktion aus dem Screen "abphotographiert" und dann eine Art OCR über diesen Auszug gejagt ... ein Heidenprojekt, wenn's überhaupt geht. :huh:

    Einmal editiert, zuletzt von CMeister (25. Juli 2014 um 19:28)

  • Hallo,

    das gucke ich mir rein interessehalber auch nochmal an - Danke!

    Aber: "MANN, MANN, MANN" - manchmal sieht man echt den Wald vor lauter Bäumen nicht.
    Ich brauche doch einfach nur
    - den betreffenden Ausschnitt der Website mit gedrückter linker Maustaste markieren
    (bei gleichbleibender Auflösung/Zoom stehen die Ausdrücke immer an der selben Stelle)
    (genau auf diese Weise räume ich ja jetzt schon Input-Felder leer und befülle diese neu)
    - mit <Strg>+<c> den Inhalt (i.e. Text) aus diesem Bereich in die Zwischenablage holen
    - diese mit ClipGet() in eine Variable ziehen und
    - deren Inhalt dann mit StringInString() passend auswerten.
    Yeah, I'm happy, yes indeed .... :rock:

    Wofür so eine Autofahrt doch immer gut ist, ein bißchen abseits des Alltags-Gedöns meditiert und dann fiel mir das ein. Wozu OCR o.ä., wenn Windows das schon mit Hausmitteln mitbringt. Und AutoIt die Zwischenablage genialerweise abgreifen kann.

    Ab jetzt werden meine Makros rennen wie Hulle, weil die jeweilige manuelle Zwischenabfrage an den User entfällt ("Ist das Programm wirklich schon da und da angekommen", "wird wirklich gerade folgendes Datum bearbeitet" usf) - das zieht sich AutoIt jetzt selbst 'raus und "entscheidet" ohne User-Abfrage autonom über den Fortgang.
    GRRRREAT!!!
    Mission completed!