博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
A WebBrowser Toy
阅读量:5313 次
发布时间:2019-06-14

本文共 1750 字,大约阅读时间需要 5 分钟。

原文:

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

   

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

    14.gif

 

posted on
2014-06-14 13:38 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/lonelyxmas/p/3788202.html

你可能感兴趣的文章
实用拜占庭容错算法PBFT
查看>>
java的二叉树树一层层输出,Java构造二叉树、树形结构先序遍历、中序遍历、后序遍历...
查看>>
php仿阿里巴巴,php实现的仿阿里巴巴实现同类产品翻页
查看>>
Node 中异常收集与监控
查看>>
Excel-基本操作
查看>>
面对问题,如何去分析?(分析套路)
查看>>
Excel-逻辑函数
查看>>
面对问题,如何去分析?(日报问题)
查看>>
数据分析-业务知识
查看>>
nodejs vs python
查看>>
poj-1410 Intersection
查看>>
Java多线程基础(一)
查看>>
TCP粘包拆包问题
查看>>
Java中Runnable和Thread的区别
查看>>
SQL Server中利用正则表达式替换字符串
查看>>
POJ 1015 Jury Compromise(双塔dp)
查看>>
论三星输入法的好坏
查看>>
Linux 终端连接工具 XShell v6.0.01 企业便携版
查看>>
JS写一个简单日历
查看>>
Python 发 邮件
查看>>