2012-05-27 55 views
0

您好我有ac#IE自动化脚本,我想从HTMLImgClass检索图像,我不能从缓存中获取图像,因为它没有保存,我不能重发请求到src,因为一个新的图像返回,所以我需要一种方式来访问浏览器内存中的图像。访问映像的Internet Explorer自动化

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

的对象retreived上述assignement,工作正常,但我不知道它的可用的方法我可以用它来获取图像。

thanx您的时间

解决 对于有兴趣的人,我解决了它这种方式,我决定将图像复制到剪贴板,然后将其保存为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"); 
            } 

回答

0

我假设这与your other question有关。如my answer there中所建议的那样,如果图像尚未保存到磁盘缓存,则您将无法在该处访问该图像。

一个解决方案是强制您的浏览器通过代理服务器处理所有请求,并因此在首次请求时存储验证码图像。我过去曾使用过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中的某些内容),您就可以开展业务了。

+0

是衙门它是相关的,我试图避免使用代理,因为这个对象可以访问验证码的高度和宽度我认为string64或东西应该可访问也。 – Evan

+0

它不是。高度和宽度是HTML结构的一部分。实际的图像是一个完全不同的资源。 – yamen

+0

你试过这种方法吗? – Evan