0

嗨,我有 ac# IE 自动化脚本,我正在尝试从 HTMLImgClass 检索图像,我无法从缓存中获取图像,因为它没有保存,我不能只是重新发送请求到 src,因为新图像返回,所以我需要一种访问浏览器内存中图像的方法。

captcha_image = (HTMLImgClass)GetElementByPosition("img", 0, ie1);

使用上述分配检索对象,效果很好,但我不知道我可以使用哪些可用的方法来获取图像。

感谢您的时间

已解决对于其他感兴趣的人,我以这种方式解决了,我决定将图像复制到剪贴板,然后将其另存为 bmp

captcha_image = (HTMLImgClass)GetElementByPosition("img", 0, ie1);
                                    IHTMLImgElement captcha_image1 = (IHTMLImgElement)captcha_image;
                                    IHTMLDocument2 doc = (IHTMLDocument2)wb1.Document;
                                    IHTMLControlRange imgRange = (IHTMLControlRange)((HTMLBody)doc.body).createControlRange();
                                    imgRange.add((IHTMLControlElement)captcha_image1);

                                    imgRange.execCommand("Copy", false, null);
                                    using (Bitmap bmp = (Bitmap)Clipboard.GetDataObject().GetData(DataFormats.Bitmap))
                                    {
                                        bmp.Save(@"C:\skt.bmp");
                                    }
4

1 回答 1

0

我假设这与您的其他问题有关。正如我在那里的回答中所建议的那样,如果图像尚未保存到磁盘缓存中,您将无法在那里访问它。

一种解决方案是强制您的浏览器通过代理处理所有请求,因此首先存储验证码图像。我过去曾为此使用过Fiddler2

在 Fiddler2 中,您可以OnBeforeResponse通过类似于以下的代码更改挂钩以保存图像:

    if (oSession.uriContains("captcha")){      // change as needed
        oSession.utilDecodeResponse();
        var filename = oSession.url;           // get an appropriate file name
        oSession.SaveResponseBody(filename);   // store the file
    }

现在,只要您的程序稍后可以找到此脚本保存的文件(通常通过关闭 URL 中的某些内容),您就可以做生意了。

于 2012-05-27T11:43:49.397 回答