Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Quellcode einer Webseite herunterladen (https://www.delphipraxis.net/169319-quellcode-einer-webseite-herunterladen.html)

Amateurprofi 11. Jul 2012 21:41

Quellcode einer Webseite herunterladen
 
Ich möchte den Quellcode einer Webseite herunterladen und auswerten.
Zurzeit mache ich das manuell indem ich auf der Webseite "Quellcode anzeigen" wähle.
Dann erscheint ein neues Fenster, das ein RichEdit enthält, in dem der Quellcode steht.
Mit Strg-A und Strg-C kopiere ich den gesamten Inhalt ins Clipboard, das mein Programm dann auswertet.

Nun möchte ich das automatisieren, d.h. mein Programm soll im Hintergrund laufen und alle paar Minuten ohne mein Zutun den Quellcode herunterladen und auswerten.
Ich habe hier auch schon einige Beiträge gelesen und die gezeigten Routinen ausprobiert, leider ohne Erfolg.

Dieses scheint zumindest teilweise zu funktionieren, liefert aber nur einen kleinen Teil der Daten und auch innerhalb dieses Teiles fehlen einige Daten.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
   IdHttp:TIdHttp;
   data:string;
begin
   //  data:=LoadUrl('http://www.030chat.de');
   idHttp:=TIdHttp.Create;
   Data := IdHTTP.Get('http://www.030chat.de');
   idHttp.Free;
   Memo1.Text:=data;
end;
Ein anderes das ich ausprobierte liefert einen leeren String, obwohl ein paar Daten geladen wurden.
Delphi-Quellcode:
function LoadURL(URL: String): String;
var
   IOpen, IURL: HINTERNET;
   Read: Cardinal;
   Msg: array[0..4096] of Char;
begin
   Result := '';
   IOpen := InternetOpen('GetIP', INTERNET_OPEN_TYPE_PRECONFIG, '', '',
                         INTERNET_FLAG_NEED_FILE);
   if IOpen <> nil then
   try
     IURL := InternetOpenUrl(IOpen, PWideChar(URL), nil, 0,
                             INTERNET_FLAG_NO_UI or INTERNET_FLAG_PRAGMA_NOCACHE
                             or INTERNET_FLAG_RELOAD, 0);
     if IURL <> nil then
     try
       repeat
         FillChar(Msg, SizeOf(Msg), 0);
         if InternetReadFile(IURL, @Msg[0], Pred(SizeOf(Msg)), Read) then
           Result := Result + Msg else
             Break;
       until Read = 0;
     finally
       InternetCloseHandle(IURL);
     end;
   finally
     InternetCloseHandle(IOpen);
   end;
end;
Das dritte, das ich probiert habe basiert auf TWebBrowser, liefert aber, wie das erste nur einen kleinen Teil der Daten (anscheinend nur den Header der Seite).

Ich habe mich bisher nie mit "Internet" beschäftigt, stehe sozusagen auf dem Schlauch und bekomme Verständnis für Beiträge in denen jemand fragt "wie kann ich zwei Zahlen addieren".

Könnte mir bitte jemand weiterhelfen ?
Was ich vorzugsweise möchte, ist das, was ich bei eingangs beschriebener Vorgehensweise erhalte.

Phoenix 11. Jul 2012 21:54

AW: Quellcode einer Webseite herunterladen
 
Tja. Das ist recht einfach. Dir scheint es bei der Seite um die Tabelle zu gehen?

Wenn Du Dir die eigentliche Antwort bei der URL anschaust, dann siehst Du folgendes:
Code:
<FRAMESET cols="120,*" FRAMEBORDER=0 FRAMESPACING=0 SCROLLING="AUTO" BORDER=0>
  <FRAME SRC="navi.htm" NAME="webnavi" SCROLLING="AUTO" MARGINHEIGHT=5 MARGINWIDTH=5>
  <FRAME SRC="online.html" NAME="webmain" SCROLLING="AUTO" MARGINHEIGHT=5 MARGINWIDTH=5>
</FRAMESET>
Das heisst die Webseite verwendet Frames. Einen Links mit der Navi, und einen rechts mit dem Hauptteil der Seite drin.
Das ist wohl der interessante Teil und dort steht auch der Pfad: Online.html.

Das heisst wenn Du nun http://www.030chat.de/online.html anfragst bekommst Du die ganzen Tabellen mit allen Daten ohne die Navigation drumrum.
Versuch das mal als Adresse und dann schau mal wie Du die Antwort auswerten kannst.

p80286 11. Jul 2012 22:21

AW: Quellcode einer Webseite herunterladen
 
Versuch es doch mal hiermit:http://www.delphipraxis.net/557172-post5.html

Gruß
K-H

Amateurprofi 11. Jul 2012 22:25

AW: Quellcode einer Webseite herunterladen
 
Zitat:

Zitat von Phoenix (Beitrag 1174375)
Tja. Das ist recht einfach. Dir scheint es bei der Seite um die Tabelle zu gehen?

Wenn Du Dir die eigentliche Antwort bei der URL anschaust, dann siehst Du folgendes:
Code:
<FRAMESET cols="120,*" FRAMEBORDER=0 FRAMESPACING=0 SCROLLING="AUTO" BORDER=0>
  <FRAME SRC="navi.htm" NAME="webnavi" SCROLLING="AUTO" MARGINHEIGHT=5 MARGINWIDTH=5>
  <FRAME SRC="online.html" NAME="webmain" SCROLLING="AUTO" MARGINHEIGHT=5 MARGINWIDTH=5>
</FRAMESET>
Das heisst die Webseite verwendet Frames. Einen Links mit der Navi, und einen rechts mit dem Hauptteil der Seite drin.
Das ist wohl der interessante Teil und dort steht auch der Pfad: Online.html.

Das heisst wenn Du nun http://www.030chat.de/online.html anfragst bekommst Du die ganzen Tabellen mit allen Daten ohne die Navigation drumrum.
Versuch das mal als Adresse und dann schau mal wie Du die Antwort auswerten kannst.

Danke, Phoenix,
habe ich ausprobiert, funktioniert aber leider nicht.
Beim Data := IdHTTP.Get('http://www.030chat.de/online.html'); hängt "sich das auf".
Da scheint eine endlos-Schleife zu laufen. (CPU-Auslastung 12 %, also "eine CPU voll ausgelastet).
Die Webseite funktioniert (Das Get… ohne "/online.html" läuft wie bisher.

Andreas L. 12. Jul 2012 09:33

AW: Quellcode einer Webseite herunterladen
 
Vielleicht hilft davon etwas:
  • TIdCookieManager zuweisen
  • Request.UserAgent einen Browser-UserAgent zuweisen
  • HandleRedirects auf True setzen

Welche Indy-Version verwendest du? Vielleicht behebt ein Update das Problem.

Amateurprofi 12. Jul 2012 13:17

AW: Quellcode einer Webseite herunterladen
 
Zitat:

Zitat von Andreas L. (Beitrag 1174410)
Vielleicht hilft davon etwas:
  • TIdCookieManager zuweisen
  • Request.UserAgent einen Browser-UserAgent zuweisen
  • HandleRedirects auf True setzen

Welche Indy-Version verwendest du? Vielleicht behebt ein Update das Problem.

Hallo Andreas L.,
danke für die Hinweise.

HandleRedirects hab ich auf True gesetzt, bringt keine anderen Ergebnisse.
UserAgent enthält "Mozilla/3.0 (compatible; Indy Library)" – muss ich da was ändern ? Und wenn ja, was muss ich da reinschreiben?
Die Indy-Version scheint 10.5.7 zu sein.

Und last not least "TIdCookieManager zuweisen"
Wie mache ich das? Ich hab keinerlei Erfahrung auf diesem Gebiet.

Andreas L. 12. Jul 2012 13:43

AW: Quellcode einer Webseite herunterladen
 
Zitat:

Zitat von Amateurprofi (Beitrag 1174451)
UserAgent enthält "Mozilla/3.0 (compatible; Indy Library)" – muss ich da was ändern ? Und wenn ja, was muss ich da reinschreiben?

z. B.: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20120427 Firefox/15.0a1
Weitere: http://www.useragentstring.com/pages...gentstring.php

Zitat:

Zitat von Amateurprofi (Beitrag 1174451)
Und last not least "TIdCookieManager zuweisen"
Wie mache ich das? Ich hab keinerlei Erfahrung auf diesem Gebiet.

Einen TIdCookieManager auf die Form ziehen und der Eigenschaft CookieManager der IdHTTP-Komponente eintragen und AllowCookie auf true setzen.

shmia 12. Jul 2012 13:58

AW: Quellcode einer Webseite herunterladen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also ich kann die Seite http://www.030chat.de/online.html ohne Probleme herunterladen.
Cookies werden keine gesetzt und es wird auch kein Redirect angeboten.
Testprogramm ist im Anhang.

Thom 12. Jul 2012 14:03

AW: Quellcode einer Webseite herunterladen
 
Bei mir gibt es auch keine Probleme (Delphi XE): Mit den enthaltenen Indy-Komponenten funktioniert das Laden der Seite. Cookies sind ebenso egal wie der User-Agent.
Delphi-Quellcode:
  HTTP:=TIdHTTP.Create;
  try
    Content:=HTTP.Get('http://www.030chat.de/online.html');
    HTTP.Response.RawHeaders.ConvertToStdValues(Memo1.Lines);
    Memo1.Lines.Add(Content);
  finally
    HTTP.Free;
  end;

Andreas L. 12. Jul 2012 14:13

AW: Quellcode einer Webseite herunterladen
 
Bei mir gehts auch (Delphi 2009 Pro + Indy 10)

Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
  http: TIdHTTP;
begin
  http := TIdHTTP.Create(nil);
  try
    Memo1.Text := http.Get('http://www.030chat.de/online.html');
  finally
    FreeAndNil(http);
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:01 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz