Delphi获取TWebBrowser全HTML代码方法汇总

5星 · 超过95%的资源 需积分: 50 168 下载量 159 浏览量 更新于2024-09-18 2 收藏 1KB TXT 举报
在Delphi编程中,利用TWebBrowser组件获取网页的完整HTML源码是一个常见的需求。Delphi中的TWebBrowser控件主要用于显示网页内容,但它并不直接提供获取HTML源码的方法。通常,我们需要通过一些间接途径来实现这一目标。这里介绍两种不同的方法: 1. 利用`IPersistStreamInit`接口: Delphi中的TWebBrowser控件实际上支持`IPersistStreamInit`接口,这个接口允许我们将对象的状态序列化到一个内存流中。你可以通过以下代码片段来实现HTML源码的获取: ```delphi uses MsHTML; var hHTMLText: HGLOBAL; BufSize: Integer; IAll: IHTMLElement; begin if Assigned(WebBrowser1.Document) then begin // 创建一个足够大的缓冲区来存储HTML文本 BufSize := 1024; // 可以根据需要调整大小 hHTMLText := GlobalAlloc(GPTR, BufSize); try // 调用WebBrowser的IPersistStreamInit接口获取HTML function GetHtml(const WebBrowser: TWebBrowser): string; begin WebBrowser.QueryInterface(_IWebBrowser2 punk); punk.GetStream(nil, hHTMLText, nil, nil, VarPtr(BufSize), nil); Result := PAnsiChar(GlobalLock(hHTMLText))^; end; Memo1.Lines.Add(GetHtml(WebBrowser1)); // 解析HTML文本,去除<head>部分 IAll := (WebBrowser1.Document as IHTMLDocument2).body; while IAll.parentElement <> nil do IAll := IAll.parentElement; Memo1.Text := IAll.outerHTML; finally // 释放内存 GlobalUnlock(hHTMLText); GlobalFree(hHTMLText); end; end; end; ``` 这段代码首先尝试获取整个HTML文档,然后使用`outerHTML`属性获取不包含`<head>`标签的主体部分。这种方法适用于Delphi中处理HTML内容,并且可以避免获取头部信息。 2. 直接操作DOM树: 如果你想获取完整的HTML,包括头部信息,另一种方法是通过操作Document Object Model (DOM)树。在上面的代码中,`IAll`变量就是用来遍历DOM树的。通过调用`parentElement`属性并重复此过程,直到找到根节点(即`<html>`标签),这样就可以确保获取到整个HTML结构。 需要注意的是,这两种方法都依赖于底层的MsHTML库,如果该库不再受支持或者你的项目环境不包含它,可能需要进行相应的调整或引入其他解决方案。此外,频繁地从WebBrowser获取HTML可能会对性能造成影响,特别是在网络状况不佳或网页加载不完整的情况下。因此,在实际应用中,应尽可能在适当的时候和方式下执行这样的操作。