Herunterladen von Rahmenquelltext ohne Browser
Rene Schneider
- cgi
Mein Problem:
Mit einem CGI-Programm starte ich eine Anfrage auf einem Server und erhalte als Antwort eine dynamische Seite, die aus mehreren Frames besteht und selbst Resultat eines CGI-Programms auf dem Server ist.
Das Ergebnis meiner Anfrage ist also eine HTML-Seite mit Seitenquelltext.
Ich bin jedoch lediglich an einem Rahmen dieser Seite, d.h. an dem zugehoerigen Rahmenquelltext interessiert. (Natuerlich ist das der dynamisch erstellte Teil der Seite.)
Stelle ich einen neuen Request mit vollstaendiger Angabe des _Rahmens_ erhalte ich jedoch weiterhin eine neue HTML-Seite mit Seitenquelltext und den Pfadnamen der einzelnen Frames.
Frage: Wie kann ich nur den Rahmenquelltext ansteuern?
Zusatz: Ich muss auf die Verwendung von Browsern verzichten. Muss ich daher vielleicht mein CGI-Programm dazu bringen, Frames zu kennen?
Vielen Dank
Rene' Schneider
Hallo Rene
Was verstehst Du exakt unter dem Rahmenquelltext ? Ist das vielleicht das Frameset-Dokument?
Poste doch bitte mal ein verkürztes Beispiel der erhaltenen Seiten und was Du erwartest.
Danke und Grüsse
Tom
Hallo Rene
Was verstehst Du exakt unter dem Rahmenquelltext ? Ist das vielleicht das Frameset-Dokument?
Poste doch bitte mal ein verkürztes Beispiel der erhaltenen Seiten und was Du erwartest.
Danke und Grüsse
Tom
Im Seitenquelltext steht folgendes Frameset:
<FRAMESET ROWS="100%,*,*" FRAMEBORDER=0 FRAMESPACING=1 BORDER=1 MARGINWIDTH=0 >
<FRAMESET COLS="140,*" FRAMEBORDER=0 FRAMESPACING=1 BORDER=1 MARGINWIDTH=0 >
<FRAMESET ROWS="*,52" border=0 frameborder="NO" >
<FRAME SRC="./cgi-bin/tools?HP=12&NP=19&bw=low&mode=hrs&panr=531972&ipx=1&ulog=www989D28022&ort=Mainz&l_id=0&ug=off&b_tag=8&b_monat=9&b_jahr=99&e_tag=9&e_monat=9&e_jahr=99&anz_pers=2&anz_dz=1&farbe=0&farbe=0&hotel_key=0&pw=piwi&name=&r_key=0" SCROLLING="auto" NORESIZE NAME="HRS_BUTTONS" frameborder="NO" marginwidth=0 marginheight=0>
<FRAME SRC="./wetter_frame/xyz.html" SCROLLING="no" NORESIZE NAME="HRS_WETTER" frameborder="NO" framespacing=0 marginwidth=0 marginheight=0>
</FRAMESET>
<FRAME SRC="./cgi-bin/suchen?HP=12&NP=19&bw=low&mode=hrs&panr=531972&ipx=1&ulog=www989D28022&ort=Mainz&l_id=0&ug=off&b_tag=8&b_monat=9&b_jahr=99&e_tag=9&e_monat=9&e_jahr=99&anz_pers=2&anz_dz=1&farbe=0&farbe=0&hotel_key=0&pw=piwi&name=&r_key=0" NAME=WORKING" >
</FRAMESET>
<FRAME NAME=DEBUG" SRC="./blank.html" SCROLLING=NO>
<FRAME NAME="UMFAGE" SRC="http://www.xyz.de/cgi-bin/umfrage" SCROLLING=NO>
</FRAMESET>
Wenn ich nun den Link, der mich interessiert (durch Verknuepfung der Adresse mit dem Servernamen) anfordere,
http://www.xyz.de./cgi-bin/suchen?HP=12&NP=19&bw=low&mode=hrs&panr=531972&ipx=1&ulog=www989D28022&ort=Mainz&l_id=0&ug=off&b_tag=8&b_monat=9&b_jahr=99&e_tag=9&e_monat=9&e_jahr=99&anz_pers=2&anz_dz=1&farbe=0&farbe=0&hotel_key=0&pw=piwi&name=&r_key=0
erhalte ich - statt dem Inhalt dieser Seite - wiederum ein komplettes Frameset.
Wenn man sich die Seite im (Netscape) Browser anzeigen laesst, kann man sich normalerweise den Inhalt dieses Rahmens ueber den rechten Mausklick -> Rahmenquelltext anzeigen lassen.
Was muss ich meinem CGI-Programm beibringen, damit es, wie der Browser, zwischen Seitenquelltext (der Definition des Framesets) und dem Quelltext der einzelnen Frames unterscheiden und nur diesen laden kann?
Gruesse
Rene
Hallo Rene
Aus einem Perl- oder anderem Serverseitigen Programm musst Du den HTML-Code des Frameset-Dokuments parsen (durchsuchen) und die Links der für Dich interessannten Frame-Dokumente hrauslesen.
Entweder machst Du das über HTML::TreeBuilder und HTML::Element (beides Perl-Module die bei CPAN heruntergeladen werden können). Du hast dort den Zugriff auf das Frame-Element mit dem Attribut "Src".
Oder Dur durchsuchst mit RE oder normalen String-Operationen den HTML-Code nach allem, das nach dem "src=" im Frame-Tag steht.
Diese Link-URLs zu den Frame-Dokumenten übergibts Du an die get-Funktion in LWP::Simple (darüber gibts bestimmt schon Beiträge im Archiv) und erhälst die eigentlichen Frame-Dokumente im HTML-Code.
Grüsse
Tom
hi!
Mit einem CGI-Programm starte ich eine Anfrage auf einem Server und erhalte als Antwort
eine dynamische Seite, die aus mehreren Frames besteht und selbst Resultat eines
CGI-Programms auf dem Server ist.
Nur mal zur Richtigstellung: CGI ist keine Programmiersprache, sondern eine Schnittstelle. Und ein CGI-Programm ist ein Programm, das mit einem Webserver über eben diese Schnittstelle kommuniziert. Wenn du bei dir zuhause also ein Standalone-Programm laufen lässt (sogar wenn es in Perl geschrieben ist), dann ist das noch lange kein CGI-Programm.
bye, Frank!