当前位置: 首页 > news >正文

htmlParser for delphi

(******************************************************)
(* **工作室 *)
(* HTML解析单元库 *)
(* *)
(* DxHtmlParser Unit *)
(* *)
(* email:316454904@qq.com QQ:316454904 *)
(******************************************************)
unit MyHtmlParser;

interface
uses Windows,MSHTML,ActiveX,Forms,Variants, SysUtils, Classes;

type
TMyHtmlParser = class
private
Doc: IHTMLDocument2;
FHTML, FURL: string;
procedure SetHTML(const Value: string);
procedure SetURL(s: string);
public
Doc2:IHTMLDocument2;
FParserOK:boolean;
FTimeOut:integer;
constructor Create;
destructor Destroy;override;
property HTML: string read FHTML write SetHTML;
property URL: string read FURL write SetURL;
property TimeOut:integer read FTimeOut write FTimeOut default 20000;
property ParserOK:boolean read FParserOK default false;
end;
implementation

{ TDxHtmlParser }

procedure TMyHtmlParser.SetURL(s: string);
var
doc4:ihtmldocument4;
tick:integer;
begin
FURL:=s ;
if FURL<>'' then
begin
tick:=gettickcount;
doc.QueryInterface(IID_ihtmldocument4,doc4);
if assigned(doc4) then
begin
doc2:=doc4.createDocumentFromUrl(s,'null');
while (doc2.readyState<>'complete') and (gettickcount-tick<FTimeOut) do
begin
application.ProcessMessages;
sleep(10);
end;
if doc2.readyState='complete' then FParserOK:=true;
end;
end;
end;

constructor TMyHtmlParser.Create;
begin
CoInitialize(nil);
//创建IHTMLDocument2接口
FTimeOut:=20000;
CoCreateInstance(CLASS_HTMLDocument, nil, CLSCTX_INPROC_SERVER, IID_IHTMLDocument2, Doc);
Assert(Doc<>nil,'构建HTMLDocument接口失败');
Doc.Set_designMode('On'); //设置为设计模式,不执行脚本
while not (Doc.readyState = 'complete') do
begin
sleep(1);
Application.ProcessMessages;
end;
HTML:='<html></html>';
end;

destructor TMyHtmlParser.Destroy;
begin
CoUninitialize;
inherited;
end;

procedure TMyHtmlParser.SetHTML(const Value: string);
var
V: OLEVariant;
vDocument: OLEVariant;
vMimeType: OLEVariant;
vHtml: OLEVariant;
tick:integer;
begin
if FHTML <> Value then
begin
tick:=gettickcount;
FHTML := Value;
V := Doc;
vDocument := V.script.Document;
vMimeType := 'text/Html';
vHtml := FHtml;
vDocument.Open(vMimeType);
vDocument.Clear;
vDocument.Write(vHtml);
vDocument.Close;
while (doc.readyState<>'complete') and (gettickcount-tick<FTimeOut) do
begin
application.ProcessMessages;
sleep(10);
end;
if doc.readyState='complete' then
begin
FParserOK:=true;
doc2:=doc;
end;
end;
end;

end.

受到得闲老师的htmlparser启发,完善了一下,去掉的自认为没必要的东西(有了IhtmlDocument2,神马都是浮云),当然不是完全抄自得闲老师的解析器,本单元中的精华是SetHTML(const Value: string);和SetURL(s: string);这两个函数,其它的没什么意思。

SetHTML(const Value: string)是抄自TEmbeddedwb的IEParser。

SetURL(s: string);是根据MSDN上ihtmlDocument4.createDocumentFromUrl创建出新的ihtmlDocument2接口。

不解释了,代码就这点。

不足的地方:doc2会自动去下载图片,如有朋友修改后还请发我一份,谢谢!!

转载于:https://www.cnblogs.com/Delphi-Farmer/archive/2011/09/21/2184192.html

相关文章:

  • ASP.NET显示农历时间
  • 多映射通用集合类(C#实现)--支持一键多值存储
  • 在 MonoTouch 中使用 Newtonsoft.Json
  • ubuntu札记之一个没有技术含量的虚拟终端的问题
  • ruby文件操作大全
  • MySQL管理员指南之--MySQL用户管理
  • Object-c 一些代码规范
  • t-sql导出EXCEL语句--待测试
  • 冷月枫林
  • PHP 计算程序运行的时间
  • 文本框自动撑高JQ插件
  • 11.23 IBeamMDAAMembershipProvider 是什么?如何使用?
  • C# WinForm开发系列 - File
  • XML中Xpath语法的使用
  • 9、如何控制框架页面或iframe内嵌页面在指定页面(区域)打开页面? [除了div+css,框架页面也不能忘记]...
  • [deviceone开发]-do_Webview的基本示例
  • css选择器
  • docker-consul
  • Kibana配置logstash,报表一体化
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 阿里云应用高可用服务公测发布
  • 闭包,sync使用细节
  • 坑!为什么View.startAnimation不起作用?
  • 你真的知道 == 和 equals 的区别吗?
  • 一天一个设计模式之JS实现——适配器模式
  • 自制字幕遮挡器
  • 7行Python代码的人脸识别
  • Java总结 - String - 这篇请使劲喷我
  • ​flutter 代码混淆
  • ​iOS实时查看App运行日志
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (BFS)hdoj2377-Bus Pass
  • (C++17) optional的使用
  • (C语言)字符分类函数
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (一) springboot详细介绍
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)负载均衡,回话保持,cookie
  • (转)人的集合论——移山之道
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET MVC第五章、模型绑定获取表单数据
  • .NET 分布式技术比较
  • .Net8 Blazor 尝鲜
  • .NET简谈设计模式之(单件模式)
  • .NET实现之(自动更新)
  • .pop ----remove 删除
  • ;号自动换行
  • @Validated和@Valid校验参数区别