如何通过WebBrowser-Control(ActiveX Internet Explorer)获取页面源代码?

时间:2009-03-24 13:07:25

标签: delphi webbrowser-control

如何通过WebBrowser Control(ActiveX InternetExplorer)获取页面源代码?

我有一个xml文档“foo.xml”。

var
 Web: TWebBrowser;
begin
 ...
 Web.Navigate("foo.xml");
 // How can I get source code thru WebBrower control<----
 ...
end;

7 个答案:

答案 0 :(得分:1)

我认为这很容易,但似乎它可能已被遗忘。您可以使用TidHTTP控件轻松完成此操作。

MyPage := IdHTTP1.Get('www.google.com');

我知道这不是你想要的,但可能有帮助。

答案 1 :(得分:1)

在DocumentCompleted事件中,查看WebBrowser控件的DocumentText属性。它应该包含已加载页面的完整文本。

答案 2 :(得分:1)

IHTMLDocument2(Web.Document).Body.InnerHTML;

这应该返回页面的来源。

答案 3 :(得分:1)

另一种效果很好的方法是使用Synapse。使用synapse调用HttpGet检索您的初始资源(它为您提供源代码),然后根据需要进行操作。

另一种选择是使用EmbeddedWB组件,它比标准的Delphi组件更多地暴露了Web浏览器的更多属性和功能,并且仍然符合您在Web浏览器中执行此操作的要求。

答案 4 :(得分:1)

要通过WebBrowser控件访问页面的整个HTML,请使用:

Web.Document.All[0].OutterHtml;

答案 5 :(得分:1)

private void btnTest_Click(object sender, EventArgs e)
        {
            wbMain.Navigate("foo.xml");
            wbMain.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(testing);
        }

        private void testing(Object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            test = wbMain.DocumentText;
        }

我知道这有点晚了但这对我有用。 wbMain是WebBrowser对象。

答案 6 :(得分:1)

WebBrowser1.Navigate()使用Windows操作系统中内置的IE组件将其加载到RAD组件窗口中。您所做的是响应回调(对于浏览器组件,双击OnDownloadComplete事件)并将其保存到该函数中的文件。工作代码片段:

procedure TMainForm.WB_SaveAs_HTML(WB : TWebBrowser; const FileName : string) ;
var
   PersistStream: IPersistStreamInit;
   Stream: IStream;
   FileStream: TFileStream;
begin
   if not Assigned(WB.Document) then
   begin
     Logg('Document not loaded!') ; //'Logg' adds a line to a log file.
     Exit;
   end;

   PersistStream := WB.Document as IPersistStreamInit;
   FileStream := TFileStream.Create(FileName, fmCreate) ;
   try
     Stream := TStreamAdapter.Create(FileStream, soReference) as IStream;
     if Failed(PersistStream.Save(Stream, True)) then ShowMessage('SaveAs HTML fail!') ;
   finally
     FileStream.Free;
   end;

end; (* WB_SaveAs_HTML *)

procedure TMainForm.WebBrowser1DownloadComplete(Sender: TObject);
begin
   if (WebBrowser1.Document<>nil)AND NOT(WebBrowser1.busy) then begin
       WB_SaveAs_HTML(WebBrowser1,'test.html');
       //myStringList.loadFromFile('test.html');   //process it.
   end;
end;

请注意,某些MIME(“文件”)类型(如JSON)会在IE中显示“另存为...”对话框,从而停止阅读并需要手动干预。