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

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

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

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

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

  1. 先添加对 mshtml 的引用, 在 COM 页上, 选择 Microsoft HTML Object Library
  2. 使用命名空间  using mshtml;
  3. 核心代码

 

  1. HTMLDocument html = (HTMLDocument)this.webBrowser1.Document.DomDocument;  
  2.   
  3. //下面代码中,获取图片的方式有很多,因为比较简单,我就不列举了,直接用ID来做为例子的  
  4. IHTMLControlElement img = (IHTMLControlElement)webBrowser1.Document.Images["MzImgExpPwd"].DomElement;  
  5.   
  6. IHTMLControlRange range = (IHTMLControlRange)((HTMLBody)html.body).createControlRange();  
  7. range.add(img);  
  8. range.execCommand("Copy"falsenull);  
  9.   
  10. img = null;  
  11. range = null;  
  12. html = null;  
  13.   
  14. if (Clipboard.ContainsImage())  
  15. {  
  16.     this.pictureBox1.Image = Clipboard.GetImage();  
  17. }  
  18. else  
  19. {  
  20.     MessageBox.Show("执行不成功");  
  21. }  
  22.   
  23. Clipboard.Clear();  
 

posted @ 2012-10-27 08:31  生命周期管理  阅读(517)  评论(1)    收藏  举报