13

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

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

谢谢。

4

4 回答 4

20

您可以使用IPersistStreamInitInterface 和save方法将 Webbrowser 的内容存储在 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;
于 2012-04-10T15:40:38.960 回答
5

这也很好用:

    uses MSHTML;

    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;
于 2013-03-18T19:25:00.617 回答
3

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

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

于 2012-04-10T15:40:25.607 回答
1

为什么不快速和肮脏:

OnNavigateComplete2()

Form1.RichEdit1.Text:=(WebBrowser1.OleObject.Document.documentElement.outerhtml);
于 2020-10-06T14:48:31.220 回答