![]() |
TWebbrowser: Text aus Frames finden
Hallo alle Deplhifreunde.
Ich suche eine Möglichkeit einen Text von einer Seite, welche Frames besitzt, auszulesen. Habe nur eine Möglichlkeit ohne Frames gefunden.
Delphi-Quellcode:
Ich habe keine Ahnung, was ich umändern muss.
procedure TForm1.SearchAndHighlightText(aText: string);
var tr: IHTMLTxtRange; //TextRange Object begin if not WebBrowser1.Busy then begin tr := ((WebBrowser1.Document as IHTMLDocument2).body as IHTMLBodyElement).createTextRange; //Get a body with IHTMLDocument2 Interface and then a TextRang obj. with IHTMLBodyElement Intf. while tr.findText(aText, 1, 0) do //while we have result begin ... // Ausgabe end; end; end; Suche außerdem eine Befehlsrefernz über "Webbrowser.Documents" und "Webbrowser.OleObject", da mein Delphi (bei dieser Funktion) kein Drop-Down Menü mit Befehlen einzeigt. Gruß Moyyer |
Re: TWebbrowser: Text aus Frames finden
Hallo,
Probiers mal damit:
Delphi-Quellcode:
uses
ActiveX; function TForm1.GetFrame(FrameNo: Integer): IWebbrowser2; var OleContainer: IOleContainer; enum: IEnumUnknown; unk: IUnknown; Fetched: PLongint; begin while Webbrowser1.ReadyState <> READYSTATE_COMPLETE do Application.ProcessMessages; if Assigned(Webbrowser1.document) then begin Fetched := nil; OleContainer := Webbrowser1.Document as IOleContainer; OleContainer.EnumObjects(OLECONTF_EMBEDDINGS, Enum); Enum.Skip(FrameNo); Enum.Next(1, Unk, Fetched); Result := Unk as IWebbrowser2; end else Result := nil; end; // Testseite laden procedure TForm1.Button1Click(Sender: TObject); begin Webbrowser1.Navigate('http://www.warebizprogramming.com/tutorials/html/framesEx1.htm'); end; // Save all frames in single files // Alle Frameseiten in einzelne Dateien speichern procedure TForm1.Button2Click(Sender: TObject); var IpStream: IPersistStreamInit; AStream: TMemoryStream; iw: IWebbrowser2; i: Integer; sl: TStringList; begin for i := 0 to Webbrowser1.OleObject.Document.frames.Length - 1 do begin iw := GetFrame(i); AStream := TMemoryStream.Create; try IpStream := iw.document as IPersistStreamInit; if Succeeded(IpStream.save(TStreamadapter.Create(AStream), True)) then begin AStream.Seek(0, 0); sl := TStringList.Create; sl.LoadFromStream(AStream); sl.SaveToFile('c:\frame' + IntToStr(i) + '.txt'); // memo1.Lines.LoadFromStream(AStream); sl.Free; end; except end; AStream.Free; end; end; |
Re: TWebbrowser: Text aus Frames finden
Hallo hab es ausgetestet nur leider legt er weder dateien an noch schreibt er irgendwas in das memo (die ausgeklammerte zeile)
der nachfolgende code ist zum ausfüllen von frame formularen gedacht und müsste vllt nur umgeschrieben werden, nur leider kenne ich die befehle nicht (brauche befehlsreferenz)
Delphi-Quellcode:
P.S. code ist aus diesem Beitrag (
WebBrowser1.OleObject.Document.Frames.item('Name des Frames').Document.Forms.item('Name des Formulars').Elements.item('Name des Feldes').value := 'Irgendetwas'
![]() |
Re: TWebbrowser: Text aus Frames finden
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Hab's mit D6/IE 6 probiert. Funktioniert problemlos. WebBrowser1.OleObject.Document.Frames.item('mainFr ame').Document.Forms.item(0).Elements.item('firstn ame').value := 'firstname!'; Anbei noch ein kleines Beispiel, wie man Formulare in Frames ausfuellen kann. (alles entpacken, da noch html Testdateien dabei sind) |
Re: TWebbrowser: Text aus Frames finden
Hallo.
Zitat:
![]() Hier noch ein Beispiel, wie du mit early binding auf den Inhalt eines frame zugreifen kannst:
Delphi-Quellcode:
Manchmal ist es unnötig oder sogar unerwünscht, dass der HTML-Code durch den WebBrowser gerendert wird. Dann hilft dir vielleicht die Demo zu den MSHTML markup services aus diesem thread weiter:
procedure TWebForm.DemoButtonClick(Sender: TObject);
var doc: IHTMLDocument2; win: IHTMLWindow2; fc: IHTMLFramesCollection2; u: IUnknown; i: Integer; v: OleVariant; begin doc := WebBrowser.Document as IHTMLDocument2; fc := doc.frames; ShowMessage(Format('frames detected: %d', [fc.Length])); for i := 0 to Pred(fc.length) do begin v := i; u := fc.item(v); if u.QueryInterface(IHTMLWindow2, win) = 0 then ShowMessage(win.document.body.innerHTML) end; end; ![]() Grüße vom marabu |
Re: TWebbrowser: Text aus Frames finden
Hi marabu
Dein Code hat funktioniert :mrgreen: Vielen Dank Zitat:
Gruß Moyyer |
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