C#利用WebBrowser和mshtml互操作HTML

     具体可以参考 http://blog.csdn.net/livelylittlefish/article/category/391236

     关于网站的注册机分析。注册机的写法有很多种,比较常用的是利用WebBrowser、WebClient和HttpWebRequest三者任意一个来实现。对比三者的方法,WebBrowser算是最简单、也最适合初学者的了。因为你只需要利用代码配合WebBrowser操作一下HTML就能实现。WebClient比较适中,能实现很多WebBrowser无法直接实现的效果。HttpWebRequest是三者中最底层、也是最难的一个,但也比较强大、方便。
这次我写的注册机,就选用的WebBrowser。为什么呢?是因为我懒得去分析那些HTTP请求。况且要是注册失败了,用HttpWebRequest还得要分析返回的结果,告诉用户为什么失败。我用了WebBrowser,要是失败了,让用户自己看去,我就不用管那么多了。
在VB6的时代,要用WebBrowser来操作HTML还真的是简单多了。可能因为IHTMLDocument的借口问题吧,要方便地操作HTML只要在VB6里用COM就可以了;C#里都是托管的安全代码,实现起来不太方便。

在实践的过程中,设置文本框的值倒是好搞,两三下就搞定了。可最麻烦的问题是,提交的按钮我点不了,<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程序集作为补充

原文地址:https://www.cnblogs.com/sung/p/2825971.html