6

如何通过 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;
4

7 回答 7

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 中提供“另存为...”对话框,这会停止您的阅读并需要手动干预。

于 2011-03-25T13:30:10.000 回答
1

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

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

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

于 2009-03-24T13:19:18.150 回答
1

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

于 2009-03-24T13:20:21.347 回答
1
IHTMLDocument2(Web.Document).Body.InnerHTML;

这应该返回页面的源。

于 2009-03-24T13:21:32.763 回答
1

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

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

于 2009-03-25T17:13:24.710 回答
1

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

Web.Document.All[0].OutterHtml;
于 2009-05-19T14:38:26.543 回答
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 对象。

于 2009-11-19T14:36:31.080 回答