开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 9001|回复: 3
收起左侧

[技术专题] 【第一期】MSHTML的IHTMLDocument2,一个奇怪的HTML解析器

[复制链接]

结帖率:100% (4/4)
发表于 2020-4-5 15:47:10 | 显示全部楼层 |阅读模式   四川省宜宾市
本帖最后由 1185384801 于 2020-4-5 15:51 编辑

前言

  • 本帖子大部分内容来自docs.microsoft,文档全英文,若嫌弃英文的请按Ctrl+W或Alt+F4

  • 之前我开源过帖子:【开源】当前最全面的dom解析,基于DispHTMLDocument,里面使用了GUID:“{25336920-03F9-11CF-8FD0-00AA00686F13}”创建了一个对象,该对象仅为MSHTML下的IHTMLDocument2,该对象继承了IDispatch,所以里面有“IDispatch”的命令,所以,上一贴中的“DispHTMLDocument”对象的叫法并不准确,应该是“IHTMLDocument2”对象。

  • 精易模块里面的“类_dom”均是用该对象实现的解析功能。

关于MSHTML的介绍:

  • MSHTML 是微软的窗口操作系统(Windows)搭载的网页浏览器—Internet Explorer的排版引擎的名称(又称为Trident)。

  • MSHTML是微软公司的一个COM组件,该组件封装了HTML语言中的所有元素及其属性,通过其提供的标准接口,可以访问指定网页的所有元素。

  • MSHTML提供了丰富的HTML文档接口,有IHTMLDocument、IHTMLDocument2、…、IHTMLDocument7等7种。其中,IHTMLDocument只有一个Script属性,是管理页面脚本用的;IHTMLDocument2接口跟C#的HtmlDocument类(即通过Web Browser控件直接获得的Document属性)很相似;IHTMLDocument3是跟Visual Basic 6.0里的文档对象相似的一个接口,基本上可以用到的方法都在其中。

  • MSHTML还提供封装了对HTML元素完整操作的IHTMLElement接口,通过IHTMLElement,可以准确地判断HTML元素节点的类型,还可以获取HTML元素节点的所有属性。

下面介绍IHTMLDocument2

  • IHTMLDocument2对象将得到的信息文档,检查和修改HTML元素和文本文档中。(原文:Gets information about the document, and examines and modifies the HTML elements and text in the document.)

  • IHTMLDocument2接口继承自IDispatch接口。 IHTMLDocument2也具有以下类型的成员:

    • Methods(方法)
      • Properties(属性)
  • Methods(方法):

  • IHTMLControlRange :: execCommand

    • 在当前文档,当前选择或给定范围上执行命令。
  • IHTMLControlRange :: execCommandShowHelp

    • 显示给定命令标识符的帮助信息。
  • IHTMLControlRange :: queryCommandEnabled

    • 返回一个布尔值,该值指示在给定文档的当前状态的情况下,是否可以使用   - IHTMLControlRange :: execCommand成功执行指定的命令。
  • IHTMLControlRange :: queryCommandIndeterm

    • 返回一个布尔值,该布尔值指示指定的命令是否处于不确定状态。
  • IHTMLControlRange :: queryCommandState

    • 返回一个布尔值,该值指示命令的当前状态。
  • IHTMLControlRange :: queryCommandSupported

    • 返回一个布尔值,该值指示当前范围是否支持当前命令。
  • IHTMLControlRange :: queryCommandValue

    • 返回给定命令的文档,范围或当前选择的当前值。
  • IHTMLDialog :: toString

    • 检索对象的字符串表示形式。
  • IHTMLDocument2 :: clear

    • 不支持。
  • IHTMLDocument2 ::close

    • 关闭输出流并强制显示发送的数据。
  • IHTMLDocument2 :: createElement

    • 为指定标签创建元素的实例。
  • IHTMLDocument2 :: createStyleSheet

    • 为文档创建样式表。
  • IHTMLDocument2 :: elementFromPoint

    • 返回指定x坐标和指定y坐标的元素。
  • IHTMLDocument2 :: open

    • 打开一个新窗口,并加载由给定URL指定的文档。另外,还会打开一个新窗口,该窗口使用url参数和name参数来收集   - IHTMLDocument2 :: write方法和   - IHTMLDocument2 :: writeln方法的输出。
  • IHTMLDocument2 :: queryCommandText

    • 检索与命令关联的字符串。
  • IHTMLDocument2 :: write

    • 将一个或多个HTML表达式写入指定窗口中的文档。
  • IHTMLDocument2 :: writeln

    • 将一个或多个HTML表达式(后跟一个回车符)写入指定窗口中的文档。
  • Properties(属性):由于过多,就不一一列举了。

备注:

  • 通常,每个窗口对象都有一个对应的文档对象,您可以通过使用IID_IHTMLDocument或IID_IHTMLDocument2接口标识符调用QueryIntrerface方法来获取。 包含HTML文档的Windows始终具有有效的文档对象。 包含其他格式的文档的窗口可能没有有效的文档对象。(原文:Typically, every window object has a corresponding document object that you can get by calling the QueryIntrerface method with the IID_IHTMLDocument or IID_IHTMLDocument2 interface identifiers. Windows that contain HTML documents always have valid document objects; windows that contain documents in other formats might not have valid document objects.)

  • 通常,在尝试获取不是当前窗口的窗口的文档对象之前,请确保与该窗口关联的源文件是HTML文档文件或可以表示为HTML文档的文件,例如 ,一个文本文件。(原文:In general, before you attempt to get the document object for a window that is not the current window, make sure that the source file associated with that window is an HTML document file or a file that can be represented as an HTML document, for example, a text file.)

  • 此接口在代码中也可以称为IOmDocument2。

对象要求:

  • Minimum supported client:Windows XP
  • Minimum supported server :Windows 2000 Server

总结:

  • IHTMLDocument2作为Trident(IE)导出接口,理论上是稳定的,可以用于网页爬虫,网页数据处理等(百度一下就有相关知识了)

  • 本帖到此为止,如果想了解更多,请参考微软官方文献,本帖仅为普及MSHTML相关知识和document解析器原理。



发表于 2020-4-10 16:59:33 | 显示全部楼层   湖北省黄冈市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)

签到天数: 3 天

发表于 2020-4-5 17:07:07 | 显示全部楼层   江苏省苏州市
不明觉历!!!!
回复 支持 反对

使用道具 举报

结帖率:87% (20/23)

签到天数: 1 天

发表于 2020-4-5 16:23:08 | 显示全部楼层   广东省东莞市
前排来一个
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表