Delphi获取TWebBrowser全HTML代码方法汇总
5星 · 超过95%的资源 需积分: 50 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可能会对性能造成影响,特别是在网络状况不佳或网页加载不完整的情况下。因此,在实际应用中,应尽可能在适当的时候和方式下执行这样的操作。
2248 浏览量
161 浏览量
315 浏览量
点击了解资源详情
247 浏览量
114 浏览量
183 浏览量
temp2000
- 粉丝: 1
- 资源: 7
最新资源
- PoseNorm_Fewshot:(CVPR 2020)重新审视姿势归一化以进行细粒度的少量识别
- reading-notes
- latihan
- Book_Collection_and_File:这是我在UAT的C ++编程I类的作业
- 左侧固定导航栏点击滑动对应页面
- ACM 会议模板LETEX
- TH_M02_DV03_GOBs
- ITVD_icme:改善复杂场景中的微小车辆检测,ICME,2018
- oci-dll各种版本.rar
- 唯美清新商务类PPT.zip
- torch_sparse-0.5.1-cp36-cp36m-win_amd64whl.zip
- 高中物理习题与答案.7z
- 员工礼仪守则DOC
- rapier:实体和关系中的REST API
- 用python的pyecharts模块绘制世界地图(疫情)配套资源.zip
- SnapScout-Frontend:Django 中 Snap Scout 的前端