代码之家  ›  专栏  ›  技术社区  ›  Agent_Spock

不使用SRC从Web浏览器控件获取验证码图像

  •  0
  • Agent_Spock  · 技术社区  · 7 年前

    我知道这个问题听起来可能很熟悉,谷歌上有很多相同标题的帖子,但相信我,这是不同的。

    编辑 :VS2008(由于某些技术困难而无法升级)

    问题

    如何获得 验证码图像 从一个 网络浏览器 不使用 SRC公司 ?

    你为什么不使用SRC?

    这是我试图从中获取 验证码图像 https://services.gst.gov.in/services/login
    (在用户名中键入任何内容后,将显示capta图像)

    现在如果你右击 验证码图像 去检查元素你会发现 SRC公司 验证码是:-

    enter image description here

    https://services.gst.gov.in/services/captcha?rnd=0.5313315062651027

    每当你试图进入这个链接,它会给你一个不同于前一个的验证码。这就是为什么我不能使用下面的代码,因为它显示的验证码与 控件 马上。

    HtmlElement element = webBrowser1.Document.GetElementById("imgCaptcha");
    string src = element.GetAttribute("src");
    pictureBox1.Load(element.GetAttribute("src"));
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   Reza Aghaei    7 年前

    你可以用 createControlRange 创建 controlRange 非文本元素的。然后查找图像标记,例如使用 id ,然后将图像标记添加到控件范围并调用 execCommand 要执行的方法 Copy 命令,最后从剪贴板获取图像:

    .NET 3.5版

    添加对的引用 MSHTML . 你可以通过 Microsoft HTML Object Library 在下面 COM 引用,然后添加 using mshtml; . 然后:

    IHTMLElement2 body = (IHTMLElement2)webBrowser1.Document.Body.DomElement;
    IHTMLControlRange controlRange = (IHTMLControlRange)body.createControlRange();
    IHTMLControlElement element = (IHTMLControlElement)webBrowser1.Document
        .GetElementById("imgCaptcha").DomElement;
    controlRange.add(element);
    controlRange.execCommand("Copy", false, null);
    pictureBox1.Image = (Bitmap)Clipboard.GetDataObject().GetData(DataFormats.Bitmap); 
    

    .NET=4.0

    您不需要添加引用,可以利用 dynamic :

    dynamic body = webBrowser1.Document.Body.DomElement;
    dynamic controlRange = body.createControlRange();
    dynamic element = webBrowser1.Document.GetElementById("imgCaptcha").DomElement;
    controlRange.add(element);
    controlRange.execCommand("Copy", false, null);
    pictureBox1.Image = (Bitmap)Clipboard.GetDataObject().GetData(DataFormats.Bitmap);
    

    注:

    推荐文章