zoukankan      html  css  js  c++  java
  • 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://archive.ics.uci.edu/ml/datasets.php
    实战教程 :使用Python和keras进行文本分类(上)(重要)
    洛谷 P1073 最优贸易
    P2278 [HNOI2003]操作系统
    洛谷P2024 食物链
    模板
    我的博客
    mysql一条sql把表中的男改为女,女改为男
    树的度和结点数的关系
    Spider实例详解
  • 原文地址:https://www.cnblogs.com/sung/p/2825971.html
Copyright © 2011-2022 走看看