A WebBrowser Toy
记得上大学时,某老师为了防止学生上课不听讲,只准学生在课堂上看他放映的PPT,不准学生拷贝,而考试的内容恰恰是PPT上的内容,于是一个同学来找我,我就用VB写了个专门偷老师U盘上PPT的程序,结果救了无数苍生啊。那些时光已经远去了,而现在也终将成为将来的过去。
今天又接到一个“光荣而艰巨”的任务,一个同学申请了一个XX的邮箱,可是密码忘记了,另外一个同学常使用暴力破解的方法来获取密码,可是太慢了,而且找到的工具只能使用6位数字作为字典。而单击“忘记密码?”链接需要提供以前向XX提供的生日和提示问题答案,提示问题的答案他是知道的,可是当时的生日是胡乱输入的。
现在问题就简单了,写一个程序,让程序自动向XX输入生日进行判断就可以了。
好了,这篇随笔并没有别的意图,只是向借助这个例子讲一下Visual Studio 2005中WebBrowser控件的用法。以前在我的随笔中有几篇关于mshtml的介绍,那是在.Net 1.1时代,现在要做这件事情简单多了。
来看一下,单击“忘记密码了”链接的操作流程,如下图所示:
首先,需要使用WebBrowser控件(wbXXMain)的Navigate方法进入第一个页面:


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


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


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














OK,可以开始循环处理了。慢着,我们把逻辑全部放在在WebBrowser控件的DocumentCompleted事件中,由于多次调用了Navigate方法,不需要循环语句也可以完成循环才能完成的功能(见代码)。
我把邮箱的用户名和上一次运行的起止日期以及运行的可能最终结果都保存在文件Config.xml中了,感兴趣的可更改这些参数使用自己的邮箱试一下。
A WebBrowser Toy的更多相关文章
- C# WinForm开发系列 - WebBrowser
原文:C# WinForm开发系列 - WebBrowser 介绍Vs 2005中带的WebBrowser控件使用以及一些疑难问题的解决方法, 如如何正确显示中文, 屏蔽右键菜单, 设置代理等; 收集 ...
- WebBrowse使用
C# WinForm开发系列 - WebBrowser 2009-12-14 14:19:21 标签:C# - WebBrowser 休闲 WinForm开发系列 介绍Vs 2005中带的WebBr ...
- 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 ...
- BZOJ 1010: [HNOI2008]玩具装箱toy [DP 斜率优化]
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 9812 Solved: 3978[Submit][St ...
- c#如何判断webbrowser已经加载完毕
最近有个小程序需要采集网页源代码,但有的网页中JS脚本又会生成额外的代码,比如http://www.cnblogs.com/lidabo/p/4169396.html 红框部分便是另外加载的代码. 此 ...
- 【手记】WebBrowser响应页面中的blank开新窗口及window.close关闭本窗体
注:本文适用.net 2.0+的winform项目 目的: 点击页面中的target="_blank"链接时,弹出新窗体 页面中有window.close()操作时,关闭窗体 上述 ...
- WPF 开发 WebBrowser
WebBrowser WebBrowser 报错如何屏蔽 CEF(Chromium Embedded Framework) 参考 WPF, Chrome Embedded and WebA ...
- POJ 2398 Toy Storage(计算几何)
题意:给定一个如上的长方形箱子,中间有n条线段,将其分为n+1个区域,给定m个玩具的坐标,统计每个区域中的玩具个数. 题解:通过斜率判断一个点是否在两条线段之间. /** 通过斜率比较点是否在两线段之 ...
- C# Webbrowser 常用方法及多线程调用
设置控件的值 /// <summary> /// 根据ID,NAME双重判断并设置值 /// </summary> /// <param name="tagNa ...
随机推荐
- Java一流的施工顺序
1.没有对象的构造 public class Test { public static int k = 0; public static int n = 99; public static int i ...
- Oracle中REGEXP_SUBSTR及其它支持正则表达式的内置函数小结
Oracle中REGEXP_SUBSTR函数的使用说明: 题目如下:在oracle中,使用一条语句实现将'17,20,23'拆分成'17','20','23'的集合. REGEXP_SUBSTR函数格 ...
- 第一章 工欲善其事 其利润—Android SDK工具(2)
1.2设备管理工具-调试桥(ADB) 1.2.1ADB简单介绍 ADB全称是Android Debug Bridge,是Android SDK里自带的一个工具,用这个工具能够直接操作管理Android ...
- 数据结构(C达到)------- 双链表
双链表中的每个节点包含两个指针域,指针域包含其后继节点的内存地址,还有一个指针所存储的存储器地址其领域前驱节点. 双向链表结点的类型描写叙述: //双向链表的类型描写叙述 typedef int El ...
- 使用一个T-SQL语句批量查询数据表占用空间及其行数
原文:使用一个T-SQL语句批量查询数据表占用空间及其行数 要找到数据库中数据表占用的空间和存在的行数.可以使用sp_spaceused搭配数据表的名称.就可以产生该表耗用的空间和现有行数. 如: U ...
- 简单工厂模式—>工厂模式
一.功能 根据前一篇博客:策略模式+单例模式+简单工厂模式:推送服务,想试用一下工厂模式:将之前的简单工厂模式格式化为工厂模式. 二.实现 修改前:简单工厂 public static class P ...
- 使用Eclipse设定Android开发环境
使用Eclipse设定Android开发环境 花了大概几天的时间最终搭建好了开发Android的环境了! 我是使用Eclipse +ADT顺利地搭建Android开发环境的. 如今Google以及An ...
- JAVA必备——Struts
在我们的开发中,有一个经典的框架,就是SSH,他们各自是:Struts,Spring,Hibernate,我们队他们神交已久,在曾经的博客中我介绍了Hibernate,今天我们也逐步揭开Struts的 ...
- The JSON request was too large to be deserialized
The JSON request was too large to be deserialized 这个问题出现的场景并不是很多,当你向服务端异步(ajax)post数据非常大的情况下(比如做权限管理 ...
- (大数据工程师学习路径)第三步 Git Community Book----基本用法(下)
一.比较提交 - Git Diff 1.比较提交 - Git Diff 你可以用 git diff 来比较项目中任意两个版本的差异. $ git diff master..test 上面这条命令只显示 ...