原文: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. 科技股晴间多云 阿里京东IPO或受影响

    微博的时间长达一个月的时间才上市.科技股一直笼罩. Facebook一个月股价下跌21.55%:特斯拉跌幅21.69%:亚马逊的股价相比,1一个月27日高点下跌22.13%. 以前的明星股票都已进入华 ...

  2. Eclipse4.4设备egit插件提交本地项目代码到远程仓库

    一.设备egit 打开Eclipse的Marketplace.在搜索框中输入egit就可以,能够看到Eclipse4.4已经默认安装了egit,当然假设有新版本号的egit公布的话,也能够在下图上点击 ...

  3. java提高篇(十四)-----关键字final

    在程序设计中,我们有时可能希望某些数据是不能够改变的,这个时候final就有用武之地了.final是java的关键字,它所表示的是"这部分是无法修改的".不想被改变的原因有两个:效 ...

  4. 矩阵求逆c++达到

    高斯消元法能够用来找出一个可逆矩阵的逆矩阵.设A 为一个N * N的矩阵,其逆矩阵可被两个分块矩阵表示出来.将一个N * N单位矩阵 放在A 的右手边,形成一个N * 2N的分块矩阵B = [A,I] ...

  5. HDU 2454 Degree Sequence of Graph G(Havel定理 推断一个简单图的存在)

    主题链接:pid=2454">http://acm.hdu.edu.cn/showproblem.php?pid=2454 Problem Description Wang Haiya ...

  6. Spring : 征服数据库 (两)

    本节介绍Spring和ORM集成框架.尽管Hibernate在开源ORM 社区很受欢迎.但是,本文将MyBatis案例解说.也MyBatis和Hibernate好坏是没有意义的,主要看实际需求,有兴趣 ...

  7. Python补充04 Python简史

    原文:Python简史 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python是我喜欢的语言,简洁,优美,容易使用.前两天, ...

  8. 从源代码分析modelDriven拦截器和params拦截器和拦截器prepare 和paramsPrepareParamsStack拦截器栈(让你的Struts2代码更简洁——如何培养框架设计能力

    源代码文件:Web App Libraries/struts2-core-2.3.15.3.jar/struts-default.xml 拦截器modelDriven: <interceptor ...

  9. 彩色图像--色彩空间 YIQ 、YUV 、YCbCr 、YC1C2 和I1I2I3

    学习DIP文章64天 转载请注明文章出处:http://blog.csdn.net/tonyshengtan .出于尊重文章作者的劳动,转载请标明出处.文章代码已托管,欢迎共同开发:https://g ...

  10. 使用批处理文件命令行方式快速启动和停止IIS、SqlServer

    原文:使用批处理文件命令行方式快速启动和停止IIS.SqlServer 虽然现在内存便宜了,但是自己还是嫌自己的512M内存太小,没办法,后台运行的东西太多了,有很多都是有用的没法关闭的.IIS和SQ ...