C#网页表单自动填写实现原理

网页表单自动填写实现原理
曾今向网友介绍过我的一个自己编写的自动填写网页表单的小程序,很多网友都觉得很实用,也许多会对这个程序的源码很感兴趣,这里我只是简介下程序中用到的主要代码。最初我是通过下面这篇文章渐渐积累的相关知识,再慢慢完善,现转来同大家分享,共同学习。

话说有了WebBrowser类,终于不用自己手动封装SHDocVw的 AxWebBrowser这个ActiveX控件了。这个类如果仅仅作为一个和IE一模一样浏览器,那就太没意思了(还不如直接用IE呢)。那么,无论我们是想做一个“定制版IE”,还是希望利用HTML来做用户界面(指WinApp而非WebApp。许多单机软件,包括Windows的帮助支持中心,都是HTML做的),都少不了Windows Form和包含在WebBrowser中的Web页面的交互。本文将通过几个实际的例子,初步介绍一下WinForm和WebBrowser所包含的 Web页面之间的交互。

下面的代码假设你已经建立了一个Windows Form,上面有一个WebBrowser名为“webBrowser”。

Study Case 1:用WinForm的Event Handler响应Web页面的事件

现在有这样一个Windows Application,它的界面上只有一个WebBrowser,显示一个本地的HTML文件作为界面。现在的问题是,所有逻辑都可以放在HTML文件里,唯独“关闭”按钮遇到了困难——通常,Web页面是没有办法直接控制浏览器的,更不用说结束这个WinForm程序了。

但是,在.Net 2.0当中,“由Windows Form响应Web页面的事件”已经成为了现实。

在.Net 2.0中,整个HTML文档以及其包含的各个HTML元素,都和一个个HtmlDocument、HtmlElement之类的.Net对象对应。因此只要找到这个“关闭”按钮对应的HtmlElement对象,为其click事件添加Event Handler即可。
假设HTML源代码如下:

HTML code
<html><body><input type='button' id='btnClose' value='关闭' /></body></html>

那么找出该按钮并为之添加Event Handler的代码如下:

C# code
HtmlDocument htmlDoc = webBrowser.Document;HtmlElement btnElement = htmlDoc.All['btnClose'];if (btnElement != null){btnElement.click += new HtmlElementEventHandler(HtmlBtnClose_Click);}

其中 HtmlBtnClose_Click是按下Web按钮时的Event Handler。

很简单吧?那么稍稍高级一点的——我们都知道一个HTML元素可能有很多各种各样的事件,而HtmlElement这个类只给出最常用、共通的几个。那么,如何响应其他事件呢?这也很简单,只需要调用HtmlElement的AttachEventHandler就可以了:

C# code
btnElement.AttachEventHandler('onclick', new EventHandler(HtmlBtnClose_Click));//这一句等价于上面的 btnElement.click += new HtmlElementEventHandler(HtmlBtnClose_Click);

对于其他事件,把'onclick'换成该事件的名字就可以了。例如:

C# code
formElement.AttachEventHandler('onsubmit', new EventHandler(HtmlForm_Submit));

Study Case 2:表单(form)的自动填写和提交
要使我们的WebBrowser具有自动填表、甚至自动提交的功能,并不困难。

假设有一个最简单的登录页面,输入用户名密码,点“登录”按钮即可登录。已知用户名输入框的id(或Name,下同)是username,密码输入框的id是password,“登录”按钮的id是submitbutton,那么我们只需要在webBrowser的 DocumentCompleted事件中使用下面的代码即可:

C# code
HtmlElement btnSubmit = webBrowser.Document.All['submitbutton'];HtmlElement tbUserid = webBrowser.Document.All['username'];HtmlElement tbPasswd = webBrowser.Document.All['password'];if (tbUserid == null || tbPasswd == null || btnSubmit == null) return;tbUserid.SetAttribute('value', 'smalldust');tbPasswd.SetAttribute('value', '12345678');btnSubmit.InvokeMember('click');

这里我们用SetAttribute来设置文本框的“value”属性,用InvokeMember来调用了按钮的“click”方法。因为不同的Html元素,其拥有的属性和方法也不尽相同,所以.Net 2.0提供了统一的HtmlElement来概括各种Html元素的同时,提供了这两个方法以调用元素特有的功能。关于各种Html元素的属性和方法一览,可以查阅MSDN的DHTML Reference。

※关于表单的提交,的确还有另一种方法就是获取form元素而不是button,并用form元素的 submit方法:

C# code
HtmlElement formLogin = webBrowser.Document.Forms['loginForm'];//……formLogin.InvokeMember('submit');

本文之所以没有推荐这种方法,是因为现在的网页,很多都在submit按钮上添加onclick事件,以对提交的内容做最基本的验证。如果直接使用form的submit方法,这些验证代码就得不到执行,有可能会引起错误。

(0)

相关推荐

  • [html] 第69天 怎样禁止表单记住密码自动填充?

    今日试题: 怎样禁止表单记住密码自动填充? 此开源项目四大宗旨:勤思考,多动手,善总结,能坚持 <论语>,曾子曰:"吾日三省吾身"(我每天多次反省自己). 前端面试每日 ...

  • 利用excel VBA进行自动化数据分析,数据汇总,网页表单自动提交等功能

    利用excel VBA进行自动化数据分析,数据汇总,网页表单自动提交等功能 在制造业公司的生产管理,经营管理,采购管理,财务管理等工作中,都有大量的数据处理的任务,通过繁复的excel手工运算获取结果 ...

  • 自动填写网页表单的软件或方法,这技能迟早会有用。

    表单这个词显得略微有点专业,实际上就是我们在网页上注册或者使用一些基于网页的系统时,需要我们录入填写的东西,我们称之为表单. 这篇文章主要针对那些需要重复和大量录入的工作,一方面可以解决一些重复性劳动 ...

  • 植物CRISPR单碱基编辑技术原理

    由于同源重组修复与非同源末端连接相比发生频率较低,所以科学家开发了用于单碱基编辑的系统.该单碱基编辑系统不需要诱导DNA双链断裂,也不需要加入DNA修复模板即可实现位点单碱基的改变.该技术已成功地应用 ...

  • 发电机 单程式发电机工作原理

    本文主要给大家介绍发动机调速器的基本工作原理,并且调速器分为几个种类,单程式调速器.两极式调速器.全程式调速器.         下面开始介绍单程式调速器工作模式:         调速器要能依据外部 ...

  • 双电源自动切换电路原理_双电源自动切换原理图

    双电源切换应用也非常广,我们简单看一下怎么用继电器,接触器实现自动切换. 两个接触器实现切换备用电源的线圈走主接触器的常闭点,主电源接触器吸合主电路导通.主电源断电,备用电源通过主接触器的常闭点导通. ...

  • 单碱基编辑技术原理

    单碱基编辑概述 基因编辑是自 80 年代末发展起来的一种分子生物学技术.它是一种通过一定的途径实现人为修改特定基因的技术.早期的基因编辑主要是利用 DNA 同源重组原理,通过设计同源片段替代靶基因片段 ...

  • 485通信自动收发电路工作原理分析

    简单介绍 485接口电路

  • 电脑百度网盘的自动备份怎么开启?

    奇迹与你同行 百度网盘有一个自动备份本地文件夹的功能.有了这个功能,你就可以将你经常修改的文件,或者是常用的文档及时更新到你的百度网盘中.或者是你经常剪辑的视频呐或者是做的模板啊,比较常用的文件都可以 ...

  • 禽蛋自动孵化器的原理

    该禽蛋自动孵化器电路由电源电路.温度/通风控制电路.自动翻蛋电路和温度指示电路组成,如图1所示. 电源电路由电源开关S3.电源变压器T.整流桥堆UR和电容器C2-C4.限流电阻器R12和稳压二极管VS ...