Как получить исходный код из компонента WebBrowser?
Я хочу получить исходный код активной страницы на компоненте WebBrowser и записать его в компонент Memo.
Спасибо.
Как получить исходный код из компонента WebBrowser?
Я хочу получить исходный код активной страницы на компоненте WebBrowser и записать его в компонент Memo.
Спасибо.
Вы можете использовать IPersistStreamInit
интерфейс и сохранить метод для хранения содержимого веб-браузера в потоке.
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
.