Как я могу получить исходный код HTML из TWebBrowser
Как я могу получить исходный код из компонента WebBrowser?
Я хочу получить исходный код активной страницы на компоненте WebBrowser и записать его в компонент Memo.
спасибо.
3 ответов
можно использовать IPersistStreamInit
интерфейс и сохранить метод для хранения содержимого Webbrowser в потоке.
Uses
ActiveX;
function GetWebBrowserHTML(const WebBrowser: TWebBrowser): String;
var
LStream: TStringStream;
Stream : IStream;
LPersistStreamInit : IPersistStreamInit;
begin
if not Assigned(WebBrowser.Document) then exit;
LStream := TStringStream.Create('');
try
LPersistStreamInit := WebBrowser.Document as IPersistStreamInit;
Stream := TStreamAdapter.Create(LStream,soReference);
LPersistStreamInit.Save(Stream,true);
result := LStream.DataString;
finally
LStream.Free();
end;
end;
Это тоже хорошо работает:
function GetHTML(w: TWebBrowser): String;
Var
e: IHTMLElement;
begin
Result := '';
if Assigned(w.Document) then
begin
e := (w.Document as IHTMLDocument2).body;
while e.parentElement <> nil do
begin
e := e.parentElement;
end;
Result := e.outerHTML;
end;
end;
об этом много раз спрашивали и отвечали на форумах Embarcadero, с большим количеством примеров кода. Обыщите архивы.
суть в том, что вы Navigate()
к нужному URL и ждать OnDocumentComplete
событие для запуска, затем QueryInterface()
на Document
свойство IPersistStreamInit
интерфейс и называем его save()
метод. Создать TStream
экземпляр объекта, например TMemoryStream
, оберните его в TStreamAdapter
объект, а затем передайте адаптер в save()
. Затем вы можете загрузить TStream
на TMemo
по мере необходимости.