Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi HTML Quellcode auslesen (https://www.delphipraxis.net/88032-html-quellcode-auslesen.html)

delphinia 9. Mär 2007 07:20


HTML Quellcode auslesen
 
Ich mmöchte gerne den Quelltext von dem aktuell geöffnenten InternetExplorer Fenster einlesen - wie?!

Angel4585 9. Mär 2007 07:35

Re: HTML Quellcode auslesen
 
rechtsklick->Quelltext anzeigen ;)

delphinia 9. Mär 2007 07:37

Re: HTML Quellcode auslesen
 
Ha ho - scherzkecks

Ich denke ich würde hier nicht posten wenn ich ihn so sehen möchte - natürlich möchte ich diesen in meinem Programm weiterverarbeiten

Angel4585 9. Mär 2007 08:06

Re: HTML Quellcode auslesen
 
dann hol dir den Quelltext per TIdHttp.Get(); oder öffne das ganze im TWebBrowser und lies dir da den Quelltext aus.. was du dann weiterverarbeitest überlasse ich dir ;)

delphinia 9. Mär 2007 08:09

Re: HTML Quellcode auslesen
 
Das geht nicht es MUSS das aktuelle offene Fenster sein und es muss daraus gelesen werden!
Das mit dem TIdHttp.Get hab ich schon versucht dadurch wird aber eine neue ID von der Website erzeugt und habe KEINEN Zugriff mehr auf den eigendlichen Inhalt!

shmia 9. Mär 2007 09:34

Re: HTML Quellcode auslesen
 
Mit folgenden Funktionen kannst du HTML aus dem WebBrowser-Objekt setzen oder auslesen.
Die Funktionen Document_SetHTML und Document_GetHTML gibt es deshalb, weil
es bei Webseiten mit Frames ja mehrere "Documents" gibt.

Delphi-Quellcode:
uses Windows, Classes, Forms, ActiveX, ComObj, SysUtils, SHDocVw;

procedure Document_SetHTML(Document: IDispatch; const HTMLCode: string);
var
  ms: TStringStream;
begin
   if Assigned(Document) then
   begin
      ms := TStringStream.Create(HTMLCode);
      try
         ms.Seek(0, 0);
         OleCheck((Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms)));
      finally
         ms.Free;
      end;
   end;
end;

function Document_GetHTML(Document: IDispatch):string;
var
   ms: TStringStream;
begin
   Result := '';
   if Assigned(Document) then
   begin
      ms := TStringStream.Create(Result);
      try
         OleCheck((Document as IPersistStreamInit).Save(TStreamAdapter.Create(ms),False));
         Result := ms.DataString;
      finally
         ms.Free;
      end;
   end;
end;



procedure WB_SetHTML(WebBrowser: TWebBrowser; const HTMLCode: string);
begin
   if not Assigned(WebBrowser.Document) then
      WebBrowser.Navigate('about:blank');
   while WebBrowser.ReadyState < READYSTATE_INTERACTIVE do
      Application.ProcessMessages;

   Document_SetHTML(WebBrowser.Document, HTMLCode);
end;
function WB_GetHTML(WebBrowser: TWebBrowser): string;
begin
   Result := Document_GetHTML(WebBrowser.Document);
end;

delphinia 9. Mär 2007 09:51

Re: HTML Quellcode auslesen
 
hmm und wie erhalte ich nun vom aktiven Fenster die daten?

shmia 9. Mär 2007 09:53

Re: HTML Quellcode auslesen
 
Zitat:

Zitat von delphinia
hmm und wie erhalte ich nun vom aktiven Fenster die daten?

Delphi-Quellcode:
var
   htlm_code:string;
begin
   htlm_code := WB_GetHTML(WebBrowser1);
Eigentlich ganz einfach, oder ?

delphinia 9. Mär 2007 09:56

Re: HTML Quellcode auslesen
 
dachte ich mir schon NUR gibt es bei mir kein "WebBrowser1"...

Du hast wohl überlesen, das ich den IE an sich meine KEIN Webbrowser in MEINER Anwendung!

Zitat :"geöffnenten InternetExplorer Fenster einlesen - wie?!"

Danek dir aber für Deine Mühe

shmia 9. Mär 2007 10:17

Re: HTML Quellcode auslesen
 
Zitat:

Zitat von delphinia
Du hast wohl überlesen, das ich den IE an sich meine KEIN Webbrowser in MEINER Anwendung!

Dann musst du zuerst alle offenen Instanzen ermitteln.
Hier ein Beispiel Codeschnippsel:
Delphi-Quellcode:
var
   sws : IShellWindows;
   sw : IDispatch;
   i : Integer;
   wb : IWebBrowser2;
begin
   sws := CoShellWindows.Create;

   // Schleife über alle offenen IE-Browser
   for i := 0 to sws.Count-1 do
   begin
      sw := sws.Item(i);
      wb := sw as IWebBrowser2;

      Memo1.Lines.Add(wb.LocationURL);
      if (Copy(wb.LocationURL, 1, 5) = 'http:') and wb.Visible then
      begin
         Memo1.Lines.Add('========HTML===========');
         Memo1.Lines.Add(Document_GetHTML(wb.Document));
      end;
   end;
end;
Dann musst du prüfen, ob überhaupt HTML geladen ist.:
wb.LocationURL muss mit http: oder https: beginnen.

delphinia 9. Mär 2007 10:21

Re: HTML Quellcode auslesen
 
Diesen Code hatte ich heute schonmal! Aber wieder entfernt, da er mir von ALLEN Anwenungen die InternetExplorer Fenster verwenden den HTML Code gibt - selbst von so ner anwendung wie Steam oder Hilfe Dateien


Dabei ist aber mein Problem das NUR das Aktuelle zu sehende Fenter den Code zu bekommen


Habe schon an sowas gedacht

Delphi-Quellcode:
if WB.LocationName = 'Das Web' then
Aber davon könnte ich auch mehrere haben dann ist es wieder hinfällig

shmia 9. Mär 2007 10:33

Re: HTML Quellcode auslesen
 
Zitat:

Zitat von delphinia
Diesen Code hatte ich heute schonmal! Aber wieder entfernt, da er mir von ALLEN Anwenungen die InternetExplorer Fenster verwenden den HTML Code gibt - selbst von so ner anwendung wie Steam oder Hilfe Dateien
Dabei ist aber mein Problem das NUR das Aktuelle zu sehende Fenter den Code zu bekommen

Trotzdem ist das der richtige Weg. Du musst einfach ein Kriterium finden, anhand dessen du dein Toplevel-Fenster von allen anderen unterscheiden kannst.
Wenn man statt IWebBrowser das Interface IWebBrowser2 verwendet, dann bekommt man einige zusätzliche Properties, die man abfragen kann.
Besonders nützlich ist wb.HWND - das Window-Handle.

delphinia 9. Mär 2007 10:36

Re: HTML Quellcode auslesen
 
Es gibt leider keinen unterschied in den Seiten...
Hmm ;-(



Hmm aber eventuell hab ich gerade ne Idee das anhand der URL zu prüfen!

Angel4585 9. Mär 2007 11:00

Re: HTML Quellcode auslesen
 
Frage:

Wenn du das in deinem Programm machst.. dann ist doch dein Program aktiv und nicht der IE, also wie willst du dann das aktive IE-Fenster ermitteln?

Ansonsten denk ich gab es irgendwo ne Methode um das Handle des momentan aktiven Fensters zu ermitteln.

delphinia 9. Mär 2007 11:02

Re: HTML Quellcode auslesen
 
Nein mein Programm schlummert in der TNA und das ganze geht dann per Timer

Angel4585 9. Mär 2007 11:30

Re: HTML Quellcode auslesen
 
und was soll das machen? Emailadressen für en Spamverteiler auslesen? :shock:

delphinia 9. Mär 2007 11:32

Re: HTML Quellcode auslesen
 
Nein - Emails lesen

shmia 9. Mär 2007 12:36

Re: HTML Quellcode auslesen
 
Uffff. Jetzt hab ich dich doch 2cm vor die Lösung gesetzt.
Also mit GetForegroundWindow holst du das Handle des Windows, dass den Focus hat
und dann vergleichen:
Delphi-Quellcode:
   if (Copy(wb.LocationURL, 1, 5) = 'http:') and wb.Visible and (wb.Hwnd=GetForegroundWindow)then
   begin
      Memo1.Lines.Add('========HTML===========');
      Memo1.Lines.Add(Document_GetHTML(wb.Document));
   end;
Am Besten die Funktion GetForegroundWindow ausserhalb der Schleife aufrufen und in lokale Variable packen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:41 Uhr.

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