zoukankan      html  css  js  c++  java
  • [转]从C#中访问DHTML DOM对象

    从C#中访问DHTML DOM对象
    http://www.zzchn.com/edu/20080727/91906.shtml
    C# 实现基本思路为:使用从CDHtmlDialog或者CHtmlView继承的类来创建一个浏览器窗口,并打开你指定的URL。
    在DocumentComplete事件(虚函数)中获得浏览器容器的IHTMLDocument2接口(文档接口)。
    从文档接口中扫描DOM树,寻找你希望的FORM元素。
    扫描FORM中的各个IHTMLInputElement,如果是你希望赋值的,就执行IHTMLInputElement::put_Value()赋值。
    调用IHTMLFormElement::submit()方法实现提交

    **************************
    C#利用WebBrowser操作HTML

      这两天,给一个朋友写一个网站的注册机。注册机的写法有很多种,比较常用的是利用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程序集作为补充

    ********************

    可以考虑开发Firefox的 extension 来实现对google文档的备份

  • 相关阅读:
    php在没用xdebug等调试工具的情况下如何让调试内容优雅地展现出来?--php数组格式化
    linux自动定时备份web程序和mysql数据库
    linux下用cronolog分割apache日志
    写在前面--点燃酱爆心中的那团火
    我对知乎前端相关问题的十问十答(转)
    参考美团、饿了么 && localStorage
    vue-scroller的使用 && 开发自己的 scroll 插件
    如何发布一个包到npm && 如何使用自己发布的npm包 && 如何更新发布到npm的package && 如何更新当前项目的包?
    VUE中toast的使用与开发
    如何在vue && webpack 项目中的单文件组件中引入css
  • 原文地址:https://www.cnblogs.com/windy86/p/2690052.html
Copyright © 2011-2022 走看看