Вопрос по – Как я могу получить исходный код HTML из TWebBrowser

10

Как я могу получить исходный код из компонента WebBrowser?

Я хочу получить исходный код активной страницы в компоненте WebBrowser и записать его в компонент Memo.

Благодарю.

Ваш Ответ

3   ответа
18

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;
Error: User Rate Limit ExceededLStream := TStringStream.Create('', TEncoding.UTF8);
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Leadri
Error: User Rate Limit Exceeded
4

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;
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededdocumentError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
3

с большим количеством примеров кода. Поиск в архивах.

Суть в том, что выNavigate() на нужный URL и дождитесьOnDocumentComplete событие для огня, тоQueryInterface() Document собственность дляIPersistStreamInit интерфейс и вызвать егоsave() метод. СоздатьTStream экземпляр объекта, такой какTMemoryStreamзаверните вTStreamAdapter объект, а затем передать адаптерsave(), Затем вы можете загрузитьTStream вTMemo по мере необходимости.

Похожие вопросы