WebBrowser-HTML DOM

来源:互联网 发布:nozzle水龙头淘宝 编辑:程序博客网 时间:2024/06/06 04:31

全面介绍WebBrowser的中文资料比较少,同时,使用WebBrowser操作网页最好具备一定的HTML DOM背景知识

http://www.w3school.com.cn/ 是一个很不错的网站,上面提供了各类丰富的Web技术中文参考,包括HTML DOM,

同时,HTML DOM中文文档也弥补了WebBrowser中文资料不多的问题。

 

WebBrowser貌似并不是完全以HTML DOM标准进行对网页节点的访问,此外,因为是封装,一些底层操作就不太方便进行了,所以在WebBrowser开发中,可能还会用到mshtml,同样的mshtml的中文资料也非常少,以下是摘自BLOG文章的对mshtml的介绍:

 

.NET 自带的 WebBrowser 控件,使用起来可以说是相当方便了,微软 已经对其进行了比较完美的封装,但所谓“有得必有失”,正是这种封装,也使得该控件的一些底层信息,全都看不到了。

我们要实现的功能,就是利用了IE的DOM,这个在 WebBrowser 中,就无能为力了, 所以,我们这里要使用 mshtml 这个COM对象。

在实践的过程中,设置文本框的值倒是好搞,两三下就搞定了。可最麻烦的问题是,提交的按钮我点不了,<form>标签也无法提交。因为C#里面只有HtmlElement类(System.Windows.Forms.HtmlElement),没有VB6.0里面那种HTMLButton类,也无法将HtmlElement类的对象转换为C#的HtmlButton类(System.Web.UI.HtmlControls.HtmlButton)。HTML里的所有标签(包括<input>和<form>)都只能用HtmlElement类来接收。因为HtmlElement类是没有提交和点击方法的,所以就无法成功注册了。

  C#的代码安全高了,带来的就是我们程序员的麻烦。要是VB6,我老早就做好了,只苦于机器上没装VB6,所以只能另寻出路。还好,最好找到一个很好的程序集——mshtml!在项目里面引用程序集mshtml,它下面有很多HTML标签相关的接口可以使用(估计是COM转过来的)。

  因为代码里面获取HTML标签对象用得比较多,所以还获取一下HTML的文档对象,用了IHTMLDocument接口。IHTMLDocument一共有5个接口,分别为IHTMLDocument、IHTMLDocument2、IHTMLDocument3、IHTMLDocument4和IHTMLDocument5。

  IHTMLDocument接口没多大用,只有个Script属性,是管理页面脚本用的;IHTMLDocument2接口用起来其实跟C#的HtmlDocument类(System.Windows.Forms.HtmlDocument)差不多的;IHTMLDocument3就是跟vb6里的文档对象差不多的一个接口,推荐大家都用这个,基本上要用的方法都在;IHTMLDocument4接口是跟导航有关的吧;IHTMLDocument5接口几乎都是事件管理的成员。

  先用IHTMLDocument3接口获取页面的文档对象,然后再调用getElementById方法(注意是getElementById方法,不是C#里HtmlDocument对象的GetElementById方法,是不是有JS的那种味道了?)获取IHTMLElement接口对象,这个对象就包含基本的click方法。这样,我就可以简单地模拟点击按钮的操作了。

      觉得C#的WebBrowser对HTML的操作还不是很好,好在还有mshtml程序集作为补充。

 

(上文关于按钮提交的方式其它可以通过HtmlElement的InvokeMember("click")解决)

 

MSDN mshtml reference http://msdn.microsoft.com/zh-cn/library/aa741317(en-us,VS.85).aspx

 

在.net中mshtml是需要引用的,google一下相关文章

 

以下是HtmlElement到mshtmlIHTMLXXXElement的转换范例

原创粉丝点击