Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TWebbrowser/IdHTTP kompletten Quelltext auslesen (frames) (https://www.delphipraxis.net/81770-twebbrowser-idhttp-kompletten-quelltext-auslesen-frames.html)

Win32.API 3. Dez 2006 16:29


TWebbrowser/IdHTTP kompletten Quelltext auslesen (frames)
 
Hi,

ich stehe mal wieder vor einem Problem und zwar moechte ich den gesamten Quelltext eine Internetseite auslesen.

Delphi-Quellcode:
aString := IdHTTP1.Get('http://google.de');


var
 v: variant;

 v:= Form1.WebBrowser1.Document;
 aString := v.Body.OuterHTML;
Leider beruecksichtigt keins von beiden mehrere Frames.

Wie kann ich den Quelltext aller Frames auslesen, so wie in Firefox Aktueller Frame -> Frame-Quelltext anzeigen ?

grueße win32

RWarnecke 3. Dez 2006 17:03

Re: TWebbrowser/IdHTTP kompletten Quelltext auslesen (frames
 
Schaue mal hier bei den Schweizern, vielleicht hilft Dir das weiter.

marabu 3. Dez 2006 17:22

Re: TWebbrowser/IdHTTP kompletten Quelltext auslesen (frames
 
Hi,

alternativ kannst du in der DP nach Hier im Forum suchenGetFrameDoc suchen.

Freundliche Grüße

Win32.API 3. Dez 2006 17:39

Re: TWebbrowser/IdHTTP kompletten Quelltext auslesen (frames
 
@RWarnecke
Danke fuer die Antwort, aber leider bringt das nicht das gewuenschte Ergebniss :(
Es speicher zwar 3 Frames dessen Inhalt aber nicht dem gewuenschten entspricht.

@marabu
Ich habe eine funktion von dir gefunden, danke schonmal dafuer :

Delphi-Quellcode:
function GetFrameDoc(doc: IHTMLDocument2; v: OleVariant): IHTMLDocument2;
var
  win: IHTMLWindow2;
  u: IUnknown;
  ec: IHTMLElementCollection;
begin
  u := doc.frames.item(v);
  if Assigned(u)
  and Succeeded(u.QueryInterface(IHTMLWindow2, win))
    then Result := win.Document
    else Result := nil;
end;

function DocToStrings(doc: IDispatch; s: TStrings): Boolean;
var
  ps: IPersistStreamInit;
  sa: IStream;
  ms: TStream;
begin
  if Succeeded(doc.QueryInterface(IPersistStreamInit, ps)) then
  begin
    ms := TMemoryStream.Create;
    sa := TStreamAdapter.Create(ms, soReference) as IStream;
    Result := Succeeded(ps.Save(sa, true));
    ms.Position := 0;
    s.LoadFromStream(ms);
    ms.Free;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  doc: IHTMLDocument2;
  s: TStrings;
begin
  doc := GetFrameDoc(WebBrowser1.Document as IHTMLDocument2, 'MAIN');
  if Assigned(doc) then
  begin
    s := TStringList.Create;
    if DocToStrings(doc, s)
      then ShowMessage(s.Text)
      else ShowMessage('Rats!');
    s.Free;
  end;
end;
Leider funktionoiert dies auch nicht, liege ich richtig in der Annahme das MAIN der name des Frames ist?
Selbst mit dem Richtigen namen, bekomme ich immer die meldung:
Zitat:

---------------------------
Project2
---------------------------
Mitglied nicht gefunden.
---------------------------
OK
---------------------------


Es geht um diese Seite.

grüße win32

marabu 3. Dez 2006 19:34

Re: TWebbrowser/IdHTTP kompletten Quelltext auslesen (frames
 
Hallo win32,

die Techniken aus GetFrameDoc() übertragen auf dein Problem:

Delphi-Quellcode:
procedure ShowFrames(fc: IHTMLFramesCollection2);
var
  v: OleVariant;
  win: IHTMLWindow2;
  doc: IHTMLDocument2;
  e: IHTMLElement;
  fse: IHTMLFrameSetElement;
  u: IUnknown;
begin
  v := 0;
  while v < fc.length do
  begin
    u := fc.item(v);
    if Succeeded(u.QueryInterface(IHTMLWindow2, win)) then
    begin
      doc := win.Document;
      if Assigned(doc) then
      begin
        if Succeeded(doc.body.QueryInterface(IHTMLFrameSetElement, fse))
          then ShowFrames(doc.frames)
          else ShowMessage(doc.body.parentElement.outerHTML)
      end;
    end;
    v := v + 1;
  end;
end;
Testen kannst du es so:

Delphi-Quellcode:
begin
  with WebBrowser.Document as IHTMLDocument2 do
    ShowFrames(frames);
end;
Gute Nacht

Win32.API 4. Dez 2006 12:08

Re: TWebbrowser/IdHTTP kompletten Quelltext auslesen (frames
 
Dankeschoen fuer deine Antwort, hat mir viel Arbeit und Zeit erspart :)


grueße win32


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:42 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