如何从TWebBrowser获取HTML源代码

时间:2012-04-10 15:27:46

标签: delphi delphi-7 twebbrowser

如何从WebBrowser组件获取源代码?

我想在WebBrowser组件上获取活动页面的源代码并将其写入Memo组件。

感谢。

4 个答案:

答案 0 :(得分:18)

您可以使用IPersistStreamInit界面和save方法将Web浏览器的内容存储在Stream中。

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;

答案 1 :(得分: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;

答案 2 :(得分:3)

Embarcadero论坛已多次询问和回答这个问题,并发布了大量代码示例。搜索档案。

要点是,您Navigate()到所需的网址并等待OnDocumentComplete事件触发,然后QueryInterface() Document属性{{1}接口并调用其IPersistStreamInit方法。创建save()对象实例,例如TStream,将其包装在TMemoryStream对象中,然后将适配器传递给TStreamAdapter。然后,您可以根据需要将save()加载到TStream

答案 3 :(得分:0)

为什么不是又快又脏?

OnNavigateComplete2()

Form1.RichEdit1.Text:=(WebBrowser1.OleObject.Document.documentElement.outerhtml);