![]() |
Webbrowser html code ziehen aber aus richtigem Frame
Hallo,
ich benutze folgende Funktion um mir den HTML-Code aus dem TWebBrowser zu ziehen:
Delphi-Quellcode:
Allerdings habe ich bei seiten mit frames dann nur den Code des Framesets! Kann ich in dieser zeile
function TForm1.WB_GetHTMLCode(WebBrowser: TWebBrowser; ACode: TStrings): Boolean;
var ps: IPersistStreamInit; ss: TStringStream; sa: IStream; s: string; begin ps := WebBrowser.Document as IPersistStreamInit; s := ''; ss := TStringStream.Create(s); try sa := TStreamAdapter.Create(ss, soReference) as IStream; Result := Succeeded(ps.Save(sa, True)); if Result then ACode.Add(ss.Datastring); finally ss.Free; end; end;
Delphi-Quellcode:
nicht irgendwie Sagen dass er den Code des Frames "MAIN" ziehen soll?
ps := WebBrowser.Document as IPersistStreamInit;
Vielen Dank schonmal, Gruß Andi |
Re: Webbrowser html code ziehen aber aus richtigem Frame
Hallo Andi,
solange keine Frames im Spiel sind, ist dein Ansatz tragbar. Bei Frames ist der WebBrowser nur noch der Lieferant des Manteldokuments und dieses muss auf seine Frames hin untersucht werden. Jeder Frame hat ein zugehöriges Window und dieses liefert dir dann das Document. Natürlich könntest du die eine Zeile durch ein Code-Ungetüm ersetzen, aber mir gefällt es besser, wenn die Gesamtfunktionalität in kleinere Blöcke zerlegt wird, die man auch unabhängig voneinander verwenden kann. Ich verwende GetFrameDoc() um auf einen bestimmten Frame eines FrameSet zuzugreifen:
Delphi-Quellcode:
Den HTML-Code des so ermittelten Document besorge ich mir dann mit DocToStrings():
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;
Delphi-Quellcode:
Und aufgerufen wird das Ganze dann etwa so:
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;
Delphi-Quellcode:
Grüße vom marabu
procedure TDemoForm.ExtractButtonClick(Sender: TObject);
var doc: IHTMLDocument2; s: TStrings; begin doc := GetFrameDoc(WebBrowser.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; |
Re: Webbrowser html code ziehen aber aus richtigem Frame
Hey,
funktioniert wunderbar! Vielen Dank!!!! Gruß andi |
Re: Webbrowser html code ziehen aber aus richtigem Frame
kann das ganze nicht auch so gehen?
Delphi-Quellcode:
memo2.Lines.Text := (WebBrowser1.Document as IHTMLDocument2).frames.item('MAIN').body.innerHTML;
|
Re: Webbrowser html code ziehen aber aus richtigem Frame
Hast du es ausprobiert?
Freundliche Grüße vom marabu |
Re: Webbrowser html code ziehen aber aus richtigem Frame
nein. denn wenn du
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:45 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