原文:A WebBrowser Toy

记得上大学时,某老师为了防止学生上课不听讲,只准学生在课堂上看他放映的PPT,不准学生拷贝,而考试的内容恰恰是PPT上的内容,于是一个同学来找我,我就用VB写了个专门偷老师U盘上PPT的程序,结果救了无数苍生啊。那些时光已经远去了,而现在也终将成为将来的过去。

今天又接到一个“光荣而艰巨”的任务,一个同学申请了一个XX的邮箱,可是密码忘记了,另外一个同学常使用暴力破解的方法来获取密码,可是太慢了,而且找到的工具只能使用6位数字作为字典。而单击“忘记密码?”链接需要提供以前向XX提供的生日和提示问题答案,提示问题的答案他是知道的,可是当时的生日是胡乱输入的。

现在问题就简单了,写一个程序,让程序自动向XX输入生日进行判断就可以了。

好了,这篇随笔并没有别的意图,只是向借助这个例子讲一下Visual Studio 2005中WebBrowser控件的用法。以前在我的随笔中有几篇关于mshtml的介绍,那是在.Net 1.1时代,现在要做这件事情简单多了。

来看一下,单击“忘记密码了”链接的操作流程,如下图所示:

首先,需要使用WebBrowser控件(wbXXMain)的Navigate方法进入第一个页面:

string strUrl = "http://entry.XX.com/cgi/reg?funcid=rpstart";
this.wbXXMail.Navigate(strUrl);

然后,需要用户名获取文本框,并自动填充之。这时候需要使用WebBrowser控件Document属性的GetElementById方法获取文本框(文本框的id或name可以通过查看页面的源文件找到),并使用SetAttribute方法为文本框指定value属性:

System.Windows.Forms.HtmlElement heUserName = this.wbXXMail.Document.GetElementById("UserName");
heUserName.SetAttribute("value", this.dsConfig.Tables["Config"].Rows[0]["UserName"].ToString());

接着,需要触发“确定”按钮的click事件提交文本框中的值:

System.Windows.Forms.HtmlElement heBtnUSubmit = this.wbXXMail.Document.GetElementById("update.x");
heBtnUSubmit.InvokeMember("click");

同上,在页面http://entry.XX.com/cgi/reg?funcid=rpbirthday中填写年、月、日文本框中的值,并触发“确定”按钮的click事件。无论年、月、日的输入是否正确,都会转到页面http://entry.XX.com/cgi/reg?funcid=rpquestion。这时候只能根据该页面的内容来判断输入是否正确了,可以将该页面的body中是否出现了“生日错误”作为判断的条件:

if (this.wbXXMail.Document.Body.InnerHtml.IndexOf("生日错误") != -1)
{
    //生日错误,返回开始页面,也可以使用GoBack()方法
    string strUrl = "http://entry.XX.com/cgi/reg?funcid=rpstart";
    this.wbXXMail.Navigate(strUrl);
}
else
{
    //生日输入正确的处理逻辑
}

OK,可以开始循环处理了。慢着,我们把逻辑全部放在在WebBrowser控件的DocumentCompleted事件中,由于多次调用了Navigate方法,不需要循环语句也可以完成循环才能完成的功能(见代码)。

源码下载

我把邮箱的用户名和上一次运行的起止日期以及运行的可能最终结果都保存在文件Config.xml中了,感兴趣的可更改这些参数使用自己的邮箱试一下。

A WebBrowser Toy的更多相关文章

  1. C# WinForm开发系列 - WebBrowser

    原文:C# WinForm开发系列 - WebBrowser 介绍Vs 2005中带的WebBrowser控件使用以及一些疑难问题的解决方法, 如如何正确显示中文, 屏蔽右键菜单, 设置代理等; 收集 ...

  2. WebBrowse使用

     C# WinForm开发系列 - WebBrowser 2009-12-14 14:19:21 标签:C# - WebBrowser 休闲 WinForm开发系列 介绍Vs 2005中带的WebBr ...

  3. Developing IOS Application with Delphi Xe4 .only for play the toy?

    Recently, i am working on r&d of some keypoint of some app idea. if all thing ok, i will continu ...

  4. BZOJ 1010: [HNOI2008]玩具装箱toy [DP 斜率优化]

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 9812  Solved: 3978[Submit][St ...

  5. c#如何判断webbrowser已经加载完毕

    最近有个小程序需要采集网页源代码,但有的网页中JS脚本又会生成额外的代码,比如http://www.cnblogs.com/lidabo/p/4169396.html 红框部分便是另外加载的代码. 此 ...

  6. 【手记】WebBrowser响应页面中的blank开新窗口及window.close关闭本窗体

    注:本文适用.net 2.0+的winform项目 目的: 点击页面中的target="_blank"链接时,弹出新窗体 页面中有window.close()操作时,关闭窗体 上述 ...

  7. WPF 开发 WebBrowser

    WebBrowser WebBrowser 报错如何屏蔽 CEF(Chromium Embedded Framework)       参考 WPF, Chrome Embedded and WebA ...

  8. POJ 2398 Toy Storage(计算几何)

    题意:给定一个如上的长方形箱子,中间有n条线段,将其分为n+1个区域,给定m个玩具的坐标,统计每个区域中的玩具个数. 题解:通过斜率判断一个点是否在两条线段之间. /** 通过斜率比较点是否在两线段之 ...

  9. C# Webbrowser 常用方法及多线程调用

    设置控件的值 /// <summary> /// 根据ID,NAME双重判断并设置值 /// </summary> /// <param name="tagNa ...

随机推荐

  1. JDK5什么是新的堵塞队列线程(四)

    一. 堵塞队列与普通队列: 队列是一种主要的数据类型,其典型特征是先进先出. 堵塞队列和普通队列的差别在于: 当队列为空时.从队列中获取元素的线程会被堵塞.直到其它的线程往空的队列里插入新的元素: 当 ...

  2. HDU 4864Task(更多的联合培训学校1)(贪婪)

    职务地址:pid=4864">HDU4864 这题又是一上来觉得是最小费用流,可是边太多.果然,敲完交上去后不断TLE.. 小优化了两次也没过. . . sad.. 后来看了题解才发现 ...

  3. js怎样推断一个对象{}是否为空对象,没有不论什么属性

    js怎样推断一个对象{}是否为空对象,没有不论什么属性 前段时间用js写了一个相似"angularjs"用于数据绑定的东西,功能是比較简单了, 通常应该传进来的是一个ArrayLi ...

  4. Mac OS温馨提示17:七彩花哨的输入

    OSX Mavericks中国的文字输入功能,色于windows,甚至提供了强大的手写输入功能和语音输入功能,而且发展到如今,已经有非常多种第三方输入法支持Mac了. 一.主要的输入法        ...

  5. SQL Server高可用——日志传送(4-3)——使用

    原文:SQL Server高可用--日志传送(4-3)--使用 顺接上一篇:SQL Server高可用--日志传送(4-2)--部署 本文为本系列最重要的一篇,讲述如何使用日志传送及一些注意事项.从上 ...

  6. WPF学习(12)动画

    本篇来学习WPF的动画.什么是动画?动画就是一系列帧.在WPF中,动画就是在一段时间内修改依赖属性值的行为,它是基于时间线Timeline的.有人会说,要动画干嘛,华而不实,而且添加了额外的资源消耗而 ...

  7. mysql大写和小写问题

    曾经做企业项目的时候,用的都是oracle数据库,在新公司项目用的是mysql,有关mysql大写和小写的问题 1   windows下默认mysql是不区分大写和小写的,要想让其支持大写和小写.更改 ...

  8. AIDL(1)

    AIDL(Android接口定义语言) 说明 让Android系统应用之间能够跨进程訪问. 使用AIDL技术就意味着系统的其它应用能够訪问到自己应用的服务组件. Android跨进程訪问有两种方式:一 ...

  9. 最受欢迎telnet

    点击开关在模拟器,它相当于实PC经由控制线连接真实开关 由于我使用telnet远程登录到交换机的话.因为telnet工作在TCP/IP模型的应用层,现在让应用层通信的话,我首先要保证网络层通信,通信, ...

  10. 一个sql的优化

    原文:一个sql的优化 目的:为了查询某天某个服务器上的登录id的个数   刚开始编写的sql: select count(a.mac) logusers from Log_MacLogin_All ...