分享

C#利用mshtml的COM接口,将WebBrowser中的验证码图片读入内存 | 真有意...

 大卷风 2010-10-06

C#利用mshtml的COM接口,将WebBrowser中的验证码图片读入内存

2009年2月21日 16:40

在做发贴机,灌水机,自动登录等情况时,如果遇到图片验证码的情形,就需要做验证码分析了,这时将验证码图片读入内存或保存在本地,就是必须的了

当然,使用WebClient直接download验证码图片回来,是可以实现的,但是这样的话,实际上是请求了2次验证码,而直接从webbrowser中,将验证码提取出来的话,就可以免去一次网络通信,而且,也可以应付一些网站的每次随验证码动态返回的其他附属验证信息对自动登录造成的影响。

.NET 自带的 WebBrowser 控件,使用起来可以说是相当方便了,微软 已经对其进行了比较完美的封装,但所谓“有得必有失”,正是这种封装,也使得该控件的一些底层信息,全都看不到了。

我们要实现的功能,就是利用了IE的DOM,这个在 WebBrowser 中,就无能为力了, 所以,我们这里要使用 mshtml 这个COM对象。

  1. 先添加对 mshtml 的引用, 在 COM 页上, 选择 Microsoft HTML Object Library
  2. 使用命名空间  using mshtml;
  3. 核心代码
HTMLDocument html = (HTMLDocument)this.webBrowser1.Document.DomDocument;
//下面代码中,获取图片的方式有很多,因为比较简单,我就不列举了,直接用ID来做为例子的
IHTMLControlElement img = (IHTMLControlElement)webBrowser1.Document.Images["MzImgExpPwd"].DomElement;
IHTMLControlRange range = (IHTMLControlRange)((HTMLBody)html.body).createControlRange();
range.add(img);
range.execCommand("Copy", false, null);
img = null;
range = null;
html = null;
if (Clipboard.ContainsImage())
{
this.pictureBox1.Image = Clipboard.GetImage();
}
else
{
MessageBox.Show("执行不成功");
}
Clipboard.Clear();

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多