kompetten quelltext aus frame auslesen und in variable speichern
javatis
- javascript
Habe folgendes Problem.... ich brauche aus dem quelltext einer anderen seite diverse daten die ich aber nicht mit
getElementsByTagName
oder ähnlichem rausfiltern kann das heisst ich muss einmal den kompletten quelltext der frameseite (ca 25.000 zeichen) in einer variable als string speichern.... wi bekomme ich nnun diesen kompletten quelltext in den string rein?
var quellstring = frame[1].document;
funzt schonmal nicht
kann mir da einer helfen?
Hallo erstmal!
ich brauche aus dem quelltext einer anderen seite diverse daten die ich aber nicht mit
getElementsByTagName
Warum kannst Du damit zugreifen? (getElement[s]~ ist die einfachste Möglichkeit)
oder ähnlichem rausfiltern kann das heisst ich muss einmal den kompletten quelltext der frameseite (ca 25.000 zeichen) in einer variable als string speichern.... wi bekomme ich nnun diesen kompletten quelltext in den string rein?
Sei bitte so lieb und schildere (notfalls zu viel, als [wie eben] zu wenig) alles! Sicher wird es eine Möglichkeit geben, solang der Zugriff auf das auszulesende Dokument nicht ausgeschlossen wurde. Aber die Informationen, die Du gibst sind zu gering, um Dir pauschal eine Lösung angedeien zu lassen. Poste daher bitte auch einen Verweis zu Deinem Script, um sich das, so es zu groß ist, dennoch mal durchzusehen.
Danke!
Gruß aus Berlin!
eddi
Hello,
das bringt mich auf eine Zusatzfrage:
gibt es für PHP eine Klasse, mit deren Hilfe man ausgelesene Ressourcen auf dem Server ähnlich wie mit JavaScript im Browser zerlegen kann?
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hello,
das bringt mich auf eine Zusatzfrage:
gibt es für PHP eine Klasse, mit deren Hilfe man ausgelesene Ressourcen auf dem Server ähnlich wie mit JavaScript im Browser zerlegen kann?
Noch ;) nicht.
URL
- mit parse\_url() aufplitten
- "path" mit explode() in ein Datenfeld streuen
- dem Server verfügbar machen (Session)
- Sourcen jeweils mit explode() in ein Datenfeld streuen
- Position in (array) "path" ermittel (gegebenenfalls "path" erweitern)
- die Indizes joinen
- mit dem array (aus der Session) komplettieren
- stream ran
Vom Prinzip her braucht es nicht mehr, um wieder einen Proxy mehr ins Netz zu stellen, um Profile zu erstellen ;)
Gruß aus Berlin!
eddi
Hi,
gibt es für PHP eine Klasse, mit deren Hilfe man ausgelesene Ressourcen auf dem Server ähnlich wie mit JavaScript im Browser zerlegen kann?
Falls Du den Quellcode bzw. DOM meinst: Natürlich mittels XML-Parser.
Gruß, Cybaer
Hello,
gibt es für PHP eine Klasse, mit deren Hilfe man ausgelesene Ressourcen auf dem Server ähnlich wie mit JavaScript im Browser zerlegen kann?
Falls Du den Quellcode bzw. DOM meinst: Natürlich mittels XML-Parser.
Ja, meinte ich. Nicht das Rendering der Seite.
Sind das diese Funktionen?
[54] => xml_error_string
[57] => xml_get_current_byte_index
[56] => xml_get_current_column_number
[55] => xml_get_current_line_number
[53] => xml_get_error_code
[51] => xml_parse
[52] => xml_parse_into_struct
[39] => xml_parser_create
[40] => xml_parser_create_ns
[58] => xml_parser_free
[60] => xml_parser_get_option
[59] => xml_parser_set_option
[43] => xml_set_character_data_handler
[45] => xml_set_default_handler
[42] => xml_set_element_handler
[50] => xml_set_end_namespace_decl_handler
[48] => xml_set_external_entity_ref_handler
[47] => xml_set_notation_decl_handler
[41] => xml_set_object
[44] => xml_set_processing_instruction_handler
[49] => xml_set_start_namespace_decl_handler
[46] => xml_set_unparsed_entity_decl_handler
Kann ich damit auch Nodes und Elements in den Baum einbauen und Attribute verändern? Ich überschaus jetzt nicht so auf die Schnelle, aber dann hätte ich gleich mal wieder was fürn Feierabend ;-)
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hi,
Sind das diese Funktionen?
Jep.
Kann ich damit auch Nodes und Elements in den Baum einbauen und Attribute verändern?
Nein, schreiben mußt Du direkt in den Code rein. Aber damit kannst Du XML-Dokumente parsen und *selbst* eine Baumstruktur (als Array) herstellen. (Oder Du ergänzt/änderst dieses Array und wandelst es dann wieder zurück in einen Quellcode. ;-)) Das ist weniger kompliziert, als es sich jetzt vielleicht anhört (allerdings auch noch ein relativ neues PHP-Thema: da gibt es nicht viel fertige Sourcen - und (erst) im noch wenig verbreiteten PHP 5 ist ja eine umfangreichere XML-Verarbeitung schon drin ...)
Ich habe damit allerdings bislang nur XML-Dokumente geparst. Es könnte sein (bzw. ist sehr wahrscheinlich ;-)), daß das mit HTML-Dokumenten überhaupt nicht klappt (läge nahe, ist ja ein XML-Parser ;-)). Dann müßte man halt vorher das HTML-Dokument zumindest intern nach XHTML wandeln (also z.B. mittels RegExp <br> nach <br /> wandeln), was ja auch überschaubar ist.
Ich überschaus jetzt nicht so auf die Schnelle, aber dann hätte ich gleich mal wieder was fürn Feierabend ;-)
Da sage ich mal lieber nichts zu, sonst gerate ich noch ins Schwärmen ...
Gruß, Cybaer (seit jeher großer SGML- bzw. XML-Fan ;-)))
Hallo eddy:)
Hallo erstmal!
ich brauche aus dem quelltext einer anderen seite diverse daten die ich aber nicht mit
getElementsByTagName
Warum kannst Du damit zugreifen? (getElement[s]~ ist die einfachste Möglichkeit)
Nun das Problem ist folgendes der Tagname den ich ansprechen könnte wäre:
objekt = opener.f1.document.getElementsByTagName('SCRIPT LANGUAGE="JavaScript"')[2]
;
das ergebnis ist jedoch leider "Undefined"!(f1 ist der name des fensters das vom opener der angesprochenen seite geöffnet wurde (die adressierung des fensters ist vollkommen korekt!, die skann ich mit bestimmtheit sagen!))
um es genau auszudrücken, hier ein teil des quelltextes des html dokumentes:
_____________.......
<SCRIPT LANGUAGE="JavaScript">
var temp = '<EMBED type="application/x-nppgwrap" ';
temp += ' CONTROLCLASSID="F58E1CEF-A068-4c15-BA5E-587CAF3EE8C6" ';
temp += ' NPCODEBASE="http://chat.msn.com/bin/nppgwrap.cab#Version=9,0,0,1" ';
temp += ' CONTROLCODEBASE="http://chat.msn.com/bin/msnchat45.cab#Version=9,02,0310,2401" ';
temp += ' CONTROLNAME="MSNChat" ';
temp += ' WIDTH=' + control_width + ' HEIGHT=' + control_height + ' ';
temp += ' MSNREGCookie="rwcb1f2PrFCWttRoLBGvLLIlbz8SX3qyyyIsI8d4Cl7TuFyEIOFdPa9Xu1Rh2zapCSMLMI945Bcfp0TvDn6RdQ^d^p8mYnx*w7uccZabJFSIU*5WUmAtnn4MToTXPE^fOfiwy5xijwshqRepjhP*eEl6f*AMUVP*NWOiQnqTk2KnrgWgyoGmO16vtyFFb1uE5eVKIdXGlEaCvTjfH6s5fw@@" ';
temp += ' PassportTicket="5F5p1NO!dDZMQa3AyEay1mNVjfB1QXTVeBnNULHRPRooYHmMCWIPKrgtNVVZpuNr3fWsXuLUSo9krGAeufkGHv6w$$" ';
temp += ' PassportProfile="5ql2v!HxnFjVMFpG45fKlz7ct9gN4NYeWuybXh4zcu5egSgk8GWdeCPocx0Ri4d1RTgHcNaRmTUUIsssRb4PSjLsFNF0BKUQi6GDQrM7aWZM0MuhZncX9DAN7hcXfBgjuWC5EVAPeWdfRgygk6hx5B*ZgCKgO9yBYYnQFP3LYMOCvhEpp0FK1c3A$$" ';
temp += ' RoomName="G_Herzflimmern" ';
temp += ' HexRoomName="' + EncodeHexName("G_Herzflimmern") + '" ';
temp += ' Server="207.68.167.251" ';
temp += ' BackColor="&hFFFFFF" ';
temp += ' Feature="12" ';
temp += ' BaseURL="http://de.msnusers.com/Herzflimmern" ';
temp += ' URLBack="" ';
temp += ' CreateRoom="" ';
temp += ' ChatHome="" ';
temp += ' Category="UL" ';
temp += ' ChatMode="2" ';
temp += ' AuditMessage = "Hinweis: MSN hat festgestellt, dass Sie an dieser Chatsitzung mit der IP-Adresse <B>%1</B> teilnehmen." ';
temp += ' UserRole = "5AAAAAAlAEOHaegNrZQbYzOSNQ*e2em5qj7XRX0ZUeVYWiuWm3L0bNujhAjLZpz41QjETdVjSUX!zjI!xbckG2WSwreSTRfEj9F9bbYM!lVvoAzD45kDYGWCte1GaN17j!K42DPZgtoHE$" ';
temp += ' ResDLL="http://chat.msn.com/bin/msnchat40de-de.cab#Version=9,02,0310,2401" ';
temp += '>';
document.write(temp);
</SCRIPT>
........_____________________
was ich daraus nun genau bräuchte wären genau 5 angaben undzwar die werte in den "" für folgendes:
----
MSNREGCookie
PassportTicket
PassportProfile
RoomName
UserRole
----
und spätestens darauf kann ich dann schon nichtmehr mit
objekt = objekt.getElementsByTagName.....
zugreifen da es schlicht gesehen weder tags noch namen noch id´s sind!
daher wollte ich den kompletten quelltext auslesen da ich im weiteren verlauf noch weitere werte bräuchte die hier aber erstmal nicht wichtig sind, es wäre nur schön wenn ich den kompletten quelltext der seite in einem string speichern könnte so das ich diesen string an flash weitergeben kann um ihn dort mittels der anweisung .split per actionscript zu zerlegen(so war meine idee).
Sei bitte so lieb und schildere (notfalls zu viel, als [wie eben] zu wenig) alles! Sicher wird es eine Möglichkeit geben, solang der Zugriff auf das auszulesende Dokument nicht ausgeschlossen wurde. ...
da wie gesagt das ergebnis bei objekt schon undefined ist... war auch weitergehende js syntax unbedeutend:
----
var pos1=objekt.indexOf("MSNREGCookie");
var str1=objekt.substring(pos1, 10000);
var pos1=str1.indexOf('"');
pos1=pos1+1;
var str1=objekt.substring(pos1, 10000);
var pos2=str1.indexOf('"');
var odincookie=str1.substring(pos1, pos2);
alert(odincookie);
.....
----
das alert wird schon garnichtmehr ausgeführt da ich versuche auf etwas zuzugreifen was "undefined" ist.
Ich hoffe ich habe nun genaue informationen gegeben und mir kann einer weiterhelfen:)
Gruss aus Aachen
by Sascha
Hallo javatis,
ich brauche aus dem quelltext einer anderen seite diverse daten die ich aber nicht mit
getElementsByTagName
Warum kannst Du damit
[nicht]
zugreifen? (getElement[s]~ ist die einfachste Möglichkeit)
Nun das Problem ist folgendes der Tagname den ich ansprechen könnte wäre:
objekt = opener.f1.document.getElementsByTagName('SCRIPT LANGUAGE="JavaScript"')[2]
Dieses Element wird es so nicht geben. opener.f1.document.getElementsByTagName('SCRIPT')[2] sollte dagen ansprechbar sein.
mit getElement~ greifst Du auf ein Element des Dokumentenbaums zu; "language" ist dabei nur ein Attribut, was an sich nicht einmal gibt http://www.w3.org/TR/html4/interact/scripts.html#h-18.2.1
das ergebnis ist jedoch leider "Undefined"!(f1 ist der name des fensters das vom opener der angesprochenen seite geöffnet wurde (die adressierung des fensters ist vollkommen korekt!, die skann ich mit bestimmtheit sagen!))
[...]
was ich daraus nun genau bräuchte wären genau 5 angaben undzwar die werte in den "" für folgendes:MSNREGCookie
PassportTicket
PassportProfile
RoomName
UserRole
Da nach der Ausführung von document.write(temp) das "Element" EMBED im Dokumentenbaum ist, kannst Du es direkt über getElement~ ansprechen.
EMBED ist allerdings auch kein standartisiertes Element http://de.selfhtml.org/html/multimedia/netscape.htm#definieren, daher kann es auch schlicht weg sein, daß rein gar nichts geschehen wird :\
Nimm stattdessen applet!
und spätestens darauf kann ich dann schon nichtmehr mit
objekt = objekt.getElementsByTagName.....
zugreifen da es schlicht gesehen weder tags noch namen noch id´s sind!
daher wollte ich den kompletten quelltext auslesen da ich im weiteren verlauf noch weitere werte bräuchte die hier aber erstmal nicht wichtig sind, es wäre nur schön wenn ich den kompletten quelltext der seite in einem string speichern könnte so das ich diesen string an flash weitergeben kann um ihn dort mittels der anweisung .split per actionscript zu zerlegen(so war meine idee).
Das wäre auch denkbar http://aktuell.de.selfhtml.org/artikel/javascript/file-open/index.htm
Gruß aus Berlin!
eddi
Hallo, javatis!
für den IE unter windows geht das so:
http://forum.de.selfhtml.org/archiv/2004/3/75543/#m436758
für netscape findest du bei http://www.bookmarklets.com unter "Design" ein bookmarklet "Edit HTML of Page", das du allerdings erst noch (z.b. nach meiner vorlage) framefähig machen musst.
freundl. Grüsse aus Berlin, Raik
Hallo, javatis!
für den IE unter windows geht das so:
http://forum.de.selfhtml.org/archiv/2004/3/75543/#m436758
für netscape findest du bei http://www.bookmarklets.com unter "Design" ein bookmarklet "Edit HTML of Page", das du allerdings erst noch (z.b. nach meiner vorlage) framefähig machen musst.freundl. Grüsse aus Berlin, Raik
Hallo nochmal Xarax und danke bei der auflösung nach dem tagnamen script erhalte ich nun wenigstens was zurück aber leider funktioniert weder "emdbed" noch "applet".... beides ergibt undefined
Hallo auch Raik ich hab mir das mal durchgelesen und mal etwas rumgestest mit der windows (fendster) bauart die ich bisher habe ohne es erstmal auf frames zu beziehen naja bin jetzt wieder seit 2-3 stunden dran mit dem was ich vorher schon getstet habe (dauert immer etwas da ich es ja nur online testen kann...)
folgendes problem bleibt:
opener.f1.document.getElementsByTagName("SCRIPT")[8];
ergibt:
[object HTMLScriptElement]
opener.f1.document.getElementsByTagName("SCRIPT")[8].outerHTML;
ergibt:
undefined
bin ich echt so blöd????
Gruss an euch beide und echten dank
Sascha
Hallo, javatis!
Hallo nochmal Xarax und danke bei der auflösung nach dem tagnamen script erhalte ich nun wenigstens was zurück aber leider funktioniert weder "emdbed" noch "applet".... beides ergibt undefined
Das war mein Fehler! Elemente, die per document.write() ind das Dokument eingefügt werden, können leider nicht über getElement~ angesprochen werden :\
Gruß aus Berlin!
eddi
Hallo,
Hallo nochmal Xarax und danke bei der auflösung nach dem tagnamen script erhalte ich nun wenigstens was zurück aber leider funktioniert weder "emdbed" noch "applet".... beides ergibt undefined
Das war mein Fehler! Elemente, die per document.write() ind das Dokument eingefügt werden, können leider nicht über getElement~ angesprochen werden :\
Das sollte hier nicht relevant sein. Der Inhalt des script-Elements ist zunächst einmal Text, also ein Textknoten, der am script-Elementknoten hängt. Dass dies JavaScript-Code mit HTML-Code ist, der dann durch document.write() weitere Knoten erzeugt, die nach dem script-Knoten auftauchen, braucht uns nicht zu stören. Es reicht, diesen Textknoten auszulesen.
Mathias
die nach dem script-Knoten auftauchen, braucht uns nicht zu stören. Es reicht, diesen Textknoten auszulesen.
Mathias
Hallo Mathias das dachte ich mir eigentlich auch und habe es dann mal mit
objekt.nodeValue
versucht wobei "objekt" gleich dem vorher ausgelesenen script element ist... ich habe die ausgabe dann in ein textarea realisiert welches jedoch leerbleibt (bzw wieder gelöscht wird, weil ich vorher einen normalen text mit formname.areaname.value="text" reingeschrieben habe)
also langsam verzweifle ich hat denn keiner eine idee oder gibts wirklich nirgendwo schon was fertiges was man umbauen kann weil ich bin mir eientlich ziemlich sicher das irgendjemand sonmal sowas gemacht hat in JS
gruss sascha
Hallo,
opener.f1.document.getElementsByTagName("SCRIPT")[8];
ergibt:
[object HTMLScriptElement]opener.f1.document.getElementsByTagName("SCRIPT")[8].outerHTML;
ergibt:
undefined
Hast du es einmal mit .innerHTML versucht? Oder .firstChild.nodeValue?
Mathias
Hi,
opener.f1.document.getElementsByTagName("SCRIPT")[8].outerHTML;
ergibt:
undefined
Script-Elemente haben eine Eigenschaft "text", die man lesen und ändern kann, siehe http://de.selfhtml.org/javascript/objekte/htmlelemente.htm#script.
also:
alert(opener.f1.document.getElementsByTagName("SCRIPT")[8].text);
Grüße, Stefan
Hi,
Nun das Problem ist folgendes der Tagname den ich ansprechen könnte wäre:
objekt = opener.f1.document.getElementsByTagName('SCRIPT LANGUAGE="JavaScript"')[2]
Von genannten Fehlern mal abgesehen:
Auch eine generierte HTML-Seite ist eine HTML-Seite! Sie läßt sich also mit
opener.getElementsByTagName("html")[0].innerHTML;
oder gar mit
opener.documentElement.innerHTML;
auslesen (statt opener halt ggf. die gewünschte Referenz eintragen).
Gruß, Cybaer
PS: Du mußt natürlich(und wie immer) durch entsprechende Abfragen dafür Sorge tragen, daß nur die Browser das so abfragen, die das auch beherrschen.