JavaScript Text aus der ›umgebenden‹ HTML auslesen

cumulonimbus8

Fleet Admiral
Registriert
Apr. 2012
Beiträge
19.422
Hallo!

Ich fürchte, was ich vor habe wird nicht machbar sein.

Der Plan ist aus einer live von einem Tool generierten Seite von demselben eingefügte Informationen auszulesen. Ich habe keinen Zugriff auf das Tool und dessen Daten (aus denen heraus eingefügt wird), und ich muss mit dem Tag-losen Reintext leben den mir das Tool auszuwerfen beliebt.

Kann ich also per JS den Quelltext der Seite/Datei, die wiederum dieses JS-Script auslöst (muss nicht Teilcode dieser Seite sein), auslesen und durchkämmen um bestimmte Teile zur Weiterverwendung in eine Variable zu laden?

CN8
 
Hi,

"document.documentElement.innerHTML" gibt die die Seite aus. Ist es das was du willst oder verstehe ich die Frage falsch? Werde aus der Fragestellung nicht so wirklich schlau... vielleicht kannst du es nochmal erklären...

VG,
Mad
 
Kann ich also per JS den Quelltext der Seite/Datei, die wiederum dieses JS-Script auslöst (muss nicht Teilcode dieser Seite sein), auslesen und durchkämmen um bestimmte Teile zur Weiterverwendung in eine Variable zu laden?
klar, wird vermutlich eine mühsame Arbeit aber ist machbar.
 
Das mit document.documentElement.innerHTML dürfte durchaus zum Ziel führen, allerdings will er wohl nur bestimmte Teile des Codes haben.
Dies würde theoretisch mit Regular Expressions gehen, aber viel einfacher geht es wenn man jQuery einbindet.
Damit kann man wunderbar die einzelnen Elemente im Code selektieren.

Bspw.:
Code:
var gesuchterInhalt = $('#IDdesGesuchtenElements').html();
-> Liefert den Inhalt des Elements mit der id "IDdesGesuchtenElements" zurück und schreibt es in die Variable.
Oder auch verschachtelt:
Code:
var gesuchterInhalt = $('.blub p:first-child').html();
Liefert den Inhalt des ersten p-Elements innerhalb des Elements mit der Klasse blub zurück.

Alternativ gibt es seit Html5 auch die querySelectoren.
http://t3n.de/news/javascript-umfassender-zugriff-362172/
 
Ich glaube eher das er von dem eigentlichem Script nur den unbrauchbaren Reintext bekommt, er aber den vom Script erzeugten Code haben (und verändern!?) will.

Aber wenn er wirklich nur den Reintext hat, so wird er um Regular Expressions nicht drum rumkommen.
 
WhiteShark schrieb:
Bspw.:
Code:
var gesuchterInhalt = $('#IDdesGesuchtenElements').html();
-> Liefert den Inhalt des Elements mit der id "IDdesGesuchtenElements" zurück und schreibt es in die Variable.

Du weißt aber schon dass du dazu kein JQuery brauchst? document.getElementById('huibui').innerHTML

@TE wenn du etwas mehr Infos geben würdest könnte man dir vielleicht auch helfen. Ist nicht böse gemeint, aber mit dem Post kann man Null anfangen. Du kannst auf jeden Fall die gesamte Seite + Javascript durchgrasen, aber ohne zu wissen was du genau erreichen willst ist das alles nur Raterei.
 
mambokurt schrieb:
Du weißt aber schon dass du dazu kein JQuery brauchst? document.getElementById('huibui').innerHTML
Das ist mir durchaus klar, deswegen auch das zweite Beispiel mit der Verschachtelung. Wir wissen ja nicht ob in dem erzeugtem Code überhaupt Ids vorkommen oder ob das Element was er will ne Klasse besitzt.
Und ich hab natürlich auch die Möglichkeit der querySelectoren genannt (in dem Link wird auch getElementById/ClassName erwähnt).
 
Keine IDs, keine Tags.

Das Tool kann nur Daten die ihm zur Verfügung stehen auslesen und in die frisch und ›jetzt‹ von ihm generierte (aus Vorgebe geparste) HTML-Datei injizieren.
Und zwar an ›optisch‹ vorgegebenen Stellen, die aber mitten im Code landen. Ich wüsste durchaus, was davor und was dahinter zu stehen kommt. Genauer gesagt will und müsste ich (so es sich umsetzen lässt) diesen injizierten Text in Hintergrundfarbe (vor)formatieren um ihn heimlich, still und leise zu Hand zu haben. Das Tool lässt mir keine andere Chance als diese Daten von ihm an gewissen Stellen zu platzieren, und die HTML ist voll mit Funktionen und Kontrollcode.

Also muss ich irgendwie den Bandwurminhalt »der die Seite ist« und den mir, wenn ich das richtig begreife, document.documentElement.innerHTML in eine Variable schreibt, innerhalb dieser Variable nach den o.g. Landmarken (die welche ich mehr oder weniger unsichtbar - kann sein, dass ich sogar das im Font-Tag in dem diese Daten stecken werden - von mir definiert und günstig platziert sind) suchen um fleißig darin herumzuschnipseln.

Diese Schnipsel sind dann IF anzuvertrauen um wiederum anderen JS-Code zu überreden auf eine gewünschte Weise zu agieren.
Nicht ich kontrolliere das besagte Tool, dieses kontrolliert mich - friss oder stirb (grummel…)

CN8
 
Ehrlich gesagt bin ich immer noch nicht wirklich schlauer.

Also das Tool generiert Html und setzt dort an vorgesehene Stellen Text ein und du willst jetzt den vom Tool generierten Html-Code mitsamt dem eingefügtem Text manipulieren?

In dem Fall wäre es wohl überhaupt kein Problem. Du nimmst einen Debugger (in den meisten Browsern mitgeliefert und lässt sich mit F12 öffnen).
Damit kannst du den vom Tool erzeugten Code wunderbar betrachten und schauen welche Selektoren du benötigst um das jeweilige Element zu bekommen.
Anschließend kannst du über ein zweites Script die Elemente selektieren und entsprechend deinen Wünschen verändern.
 
Nur mal so in den Raum geworfen: wenn du Zugriff auf die Seite hast und da Javascript hinterlegen kannst, dann überschreibe doch einfach die Funktion, die das ganze generiert und häng dein Zeug mit hinten dran. Fände ich zehnmal einfacher als da irgendwo mit innerHTML die Seite zu durchforsten. Du musst dann natürlich aufpassen: wenn sich etwas am Drittanbietercode ändert musst du deinen Code entsprechend anpassen, aber bei einer einzelnen Funktion geht das IMHO noch.
 
@WhiteShark
Also das Tool generiert Html und setzt dort an vorgesehene Stellen Text ein und du willst jetzt den vom Tool generierten Html-Code mitsamt dem eingefügtem Text manipulieren?
Nein! Nicht manipulieren innerhalb dieser Seite! Ich benötige den eingefügten (Fließ)Text nur um daraus Informationen zu schöpfen die für anderen JS-Code relevant sind [sein sollen…]

Du nimmst einen Debugger
»Sollten meine Ausführungen zu klar gewesen sein muss man mich missverstanden haben.« • nach Alan Greenspan
«Kann ich also per JS den Quelltext der Seite/Datei, die wiederum dieses JS-Script auslöst…» - es muss alles innerhalb der generierten Seite ablaufen, ohne Fremdeingriff, und auf die generierte = veränderte Seite reagieren.
Das fertige Konstrukt anzusehen wäre ja nun gar zu einfach, ginge es darum.


@mambokurt
«Das Tool kann nur Daten die ihm zur Verfügung stehen auslesen und in die frisch und ›jetzt‹ von ihm generierte (aus Vorgabe geparste) HTML-Datei injizieren. • Das Tool lässt mir keine andere Chance als diese Daten von ihm an gewissen Stellen zu platzieren ….»
Ich, meine JS, muss mit dem leben was ein Tool live, ohne meinen Eingriff erzeugt und selbstständig mit diesem ›Output‹ umgehen. Der besagte Output stammt von vorigen Aktionen des Seitenbetrachters auf einer vorigen HTML wobei der Betrachter das bewusste Tool (auf das ich keinen [direkten, kontrollierenden] Einfluss habe) per Button auslöst und ich das nehmen muss was ich von ihm (man könnte sagen: beiden) bekomme.


Habe ich erst mal die ganze Seite in einer Variable lautet der nächste Schritt: finde eine Landmarke. Und dann: Arbeite sich ab da vor und schneide die Rückgaben zwischen {von mir} deklarierten Schnittmarken aus - wobei es auch Leerwerte gibt - bis du die 2. Landmarke erreichst [alternativ: n-mal wobei n bekannt ist].
Mir ist aber noch nicht ganz geläufig wie ein einen String so abgrasen kann…


CN8
 
ist denn das "Drumherum" immer daselbe oder jedesmal komplett etwas anderes?
Kannst Du nicht so eine Ausgabe (oder besser 2-3 falls unterschiedlich) mal hier posten oder zumindestens ein Screenshot machen? Ich glaube dann würde man es wesentlich besser verstehen...
 
Sorry, aber es muss genügen zu erfahren, dass aus einer vorbereiteten HTML (die u.a. diverses JavaScript enthält) eine auf dem Server laufende Anwendung (besagtes Tool) eine neue HTML generiert (indem es benannte vorbereitete Seite parst) die der Anwender schließlich am Schirm sieht. Die vorbereitete Datei kann dabei an bestimmten Stellen umgestaltet werden, andere Teile bleiben stets unberührt. Dies tut das Tool nach seinen Regeln.

Mir steht nun für meine Idee maximal zu Gebote das Tool anzuweisen bestimmte Datenrückgaben in diese neue Seite an einer für mich nach den Regeln erreichbaren Stelle einzublenden. Dies [das Eingeblendete] ist so dynamisch wie o.g. Umgestaltung.

Da ich den Einblendort mit Landmarken eingrenzen kann besteht die Hoffnung den mit document.documentElement.innerHTML erfolgreich an die JS übergebenen kompletten Seitencode zu durchkämmen. So weit wenigstens bin ich mittlerweile.


Wie also durchforste und zerschnipsele ich diese Rückgabe?

Beispielsweise könnte da drin so eine Sequenz stecken: «§$§[Mögliche Einblendung #1]§$§[Mögliche Einblendung #2]§$§[Mögliche Einblendung #3]§$§[Mögliche Einblendung #4]§$§»
Die Anzahl (hier 4) ist vom Script ermittelbar und §$§ (was mir eben einfach so zugeflogen ist) möge nie sonst noch vorkommen. Gemeinheit: Es können Positionen 2ff auch leer bleiben {#1 nicht weil sonst diese Seite in Gänze übergangen würde} «§$§[Mögliche Einblendung #1]§$§§$§§$§§$§» (also ‹Nichts›, kein Leerzeichen oder so) wobei im Falle zweier beliebiger Daten die zurückgegeben werden immer von Position 1 aus aufgefüllt wird «§$§[Mögliche Einblendung #2]§$§[Mögliche Einblendung #4]§$§§$§§$§», was es ggf. einfacher macht.
In VBA ausgedrückt schwebt mir so etwas wie INSTR vor…

CN8
 
??

Geht es um eine RemoteAnwednung die Quelltext von externen Quellen verarbeitet welcher durch dieses mysteriöse Tool manipuliert wurde oder redest Du davon auf DEINER/EINER Webseite welche von dem Tool Gebrauch macht dein Skript einzufügen?

Ist das Tool ein JS Tool?
edit: Das Tool ist eine serverseitige Anwendung.

Der Output dieser Anwendung wird über JS in die Seite injiziert? AJAX? Hierzu wird eine Orientierung benötigt. id,class etc.
Diese Orientierung ist variabel?

Werte bitte die headerdaten aus. Wenn das ganze im Hintergrund abläuft kannst Du vll. Details aus der Requestantwort ziehen.

Lass einfach mal livehttpheaders laufen während Du dieses "Tool" benutzt...^-^

Auf der JavaScript Seite kannst Du evtl. direkt auf variablen zugreifen welche die empfangenen Daten verarbeiten.
 
Zuletzt bearbeitet:
Whatever. Ohne echtes Beispiel ist für mich hier EOT, mit deinen Ausführungen kann ich nichts anfangen. Viel Glück bei deinem Vorhaben...
 
@mambokurt
Vielleicht gibt es Gründe deretwegen ich dir kein Beispiel anbieten darf? Und was hättest du von einer Sequenz wie…
Code:
<div align="center"><font face="Arial" color="#C0BEC2" size="1">
§$§##§$§##§$§##§$§##§$§
</div>
…die dann, wenn ausgelöst, z.B. dies im neuen Seitenquelltext liefert…
Code:
<div align="center"><font face="Arial" color="#C0BEC2" size="1">
§$§Hans§$§Anna§$§§$§§$§
</div>
$§$ wären Landmarken an denen es zu schneiden gilt, im Beispiel wurden nur 2 von 4 möglichen Platzhaltern gefüllt.

@omaliesschen
Geht es um eine RemoteAnwednung die Quelltext von externen Quellen verarbeitet welcher durch dieses mysteriöse Tool manipuliert wurde oder redest Du davon auf DEINER/EINER Webseite welche von dem Tool Gebrauch macht dein Skript einzufügen?
Webuser X ruft die Seite auf, tut etwas, löst ein «Weiter» aus worauf das Tool aus dem Seitenvorrat ›die nächste‹ Seite aufbaut. ›Diese‹ enthält Resultate dessen was vorhin getan wurde.
Meine Aufgabe ist diese Resultate für eine völlig andere selbstgestrickte Funktion dieser Seite umzusetzen da das besagte Tool diese Art Funktion selbst nicht liefern kann. Das alles spielt sich dann in JS ab.

Ist das Tool ein JS Tool?
edit: Das Tool ist eine serverseitige Anwendung.

WinServer (IIS)… Es läuft da also eine »plumpe Exe«.

Der Output dieser Anwendung wird über JS in die Seite injiziert? AJAX? Hierzu wird eine Orientierung benötigt. id,class etc.
Diese Orientierung ist variabel?

Was besseres als «Injizieren» für das Auffüllen von Platzhaltern (hätte ich auch eher drauf kommen können…) war mir nicht eingefallen. Wie oben im DIV-Code ersetzt das Tool die ## durch ihm bekannte Werte an die ich nur so heran komme.
JS verwende ich weil es sich so anbietet.

Werte bitte die headerdaten aus. Wenn das ganze im Hintergrund abläuft kannst Du vll. Details aus der Requestantwort ziehen.
Lass einfach mal livehttpheaders laufen während Du dieses "Tool" benutzt...^-^

Das ist leider nicht zutreffend für meinen Fall… Vorgebackene HTML rein, Generietes HTML raus - und damit muss ich auskommen.

Auf der JavaScript Seite kannst Du evtl. direkt auf variablen zugreifen welche die empfangenen Daten verarbeiten.
Ich kann nichts mehr oder weniger tun als das Tool fertiges HTML erzeugen zu lassen welches ich als String zerschnipseln muss. document.documentElement.innerHTML als Argument (→ SeitenInhalt) einer in Body OnLoad gestarteten JS-Funktion ist der einzige Weg da überhaupt eine Variable zum Spielen zu bekommen.


Code:
var Trenner="§$§";
var Antwort=SeitenInhalt.split(Trenner);
genügte bereits die große Schnipselaufgabe zu erledigen. Schwein gehabt. Index 0 ist alles vorher, und Index 5 (bei 4 Platzhaltern) ist der Rest

Wie üblich, aber das werde ich selber ausbrüten müssen, kommt der programmiertechnische Tritt vors Scheinbein von der scheinbar einfachsten Stelle im gesamten Prozess…

CN8
 
Wenn Ihr mich fragt hat er ein einfaches Template System. In diesem Template werden Marker halt durch Werte ersetzt, was ein Template System halt so macht.

Am einfachsten wäre es wohl, das Template anzupassen. Wenn Du JavaScript in die Seite einfügen kannst, sollte doch auch das möglich sein.

Aber mit Sicherheit kann man es auch per JS machen. innerHTML wurde oben ja schon genannt, dann musst Du Dir noch weitere Stringfunktionen anschauen.... Problem ist nur, wenn Du keine Trennzeichen hast und in Deinem Beispielt mal alle 4 Werte gefüllt sind, wie willst Du die dann trennen?
 
Zurück
Oben