zoukankan      html  css  js  c++  java
  • 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. 核心代码
    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();

  • 相关阅读:
    面试题汇总
    Chromium中多线程及并发技术要点(C/C++)
    关于《Swift开发指南》背后的那些事
    HDU 3080 The plan of city rebuild(除点最小生成树)
    2.1.3策略模式(5.9)
    Shell脚本之监视指定进程的执行状态
    敏捷开发中的10大错误认识
    mysql插入中文数据报错:incorrect string value
    JapserReport导出PDF Could not load the following font错误
    冒泡排序
  • 原文地址:https://www.cnblogs.com/zzh1236/p/1578152.html
Copyright © 2011-2022 走看看