如何通过 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;
如何通过 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;
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 中提供“另存为...”对话框,这会停止您的阅读并需要手动干预。
我认为这很容易,但似乎它可能已经被遗忘了。不过,您可以使用 TidHTTP 控件轻松完成此操作。
MyPage := IdHTTP1.Get('www.google.com');
我知道这不是您想要的,但可能会有所帮助。
在 DocumentCompleted 事件中,查看DocumentText
WebBrowser 控件的属性。它应该包含加载页面的完整文本。
IHTMLDocument2(Web.Document).Body.InnerHTML;
这应该返回页面的源。
另一种效果很好的方法是使用Synapse。使用突触调用 HttpGet 检索您的初始资源(它为您提供源代码),然后根据需要进行操作。
另一种选择是使用EmbeddedWB组件,它比标准的 Delphi 组件公开了更多的 Web 浏览器属性和功能,并且仍然符合您在 Web 浏览器中执行此操作的要求。
要通过 WebBrowser 控件访问页面的整个 HTML,请使用:
Web.Document.All[0].OutterHtml;
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 对象。