繁体   English   中英

C#和Internet Explorer自动化,访问缓存

[英]C# and Internet Explorer automation, accessing the cache

我在C#中有一个Internet Explorer自动化脚本,它可以正常工作,但是我想访问验证码图像,每次访问验证码链接都会返回刷新的图像,并且由于浏览器已经访问过一次,因此再次访问它会使事情搞砸,因此我尝试使用以下代码在磁盘上的浏览器缓存中查找图像

tempDir = Environment.GetFolderPath(Environment.SpecialFolder.InternetCache).ToString();
System.Console.WriteLine(tempDir);
supstra = element.innerHTML.ToString().Substring(element.innerHTML.ToString().IndexOf("/sorry/image?id="), element.innerHTML.ToString().Length - element.innerHTML.ToString().IndexOf("/sorry/image?id="));
Console.WriteLine("http://www.goolge.com/sorry/image?id=" + element.innerHTML.ToString().Substring(element.innerHTML.ToString().IndexOf("/sorry/image?id="), supstra.IndexOf("&hl=")));
captchas = client.Decode(tempDir + "\\" + element.innerHTML.ToString().Substring(element.innerHTML.ToString().IndexOf("/sorry/image?id=") + 7, supstra.IndexOf("&hl=")).Replace("amp;", "") + "=en", 0);

但是,缓存目录中的映像不是映像,而是命令或名称为image?id=....的名称image?id=....

它所做的就是重新访问并获得新图像。 我要做的似乎是以某种方式访问​​浏览器显示的图像,该图像可能只在内存中,我该怎么做?

有关在C#中访问IE缓存的信息,请参见此处。

具体来说,从问题出发:

由于Internet Explorer已经在显示网页,因此网页中的图像必须已经存储在本地缓存中的某个位置

和答案(重点是我的):

您要使用GetUrlCacheEntryInfo()

从函数返回时,请使用INTERNET_CACHE_ENTRY_INFO结构的lpszLocalFileName。

此外,您的场所之一存在缺陷。 有时IE仅在内存中代表该图像,并且磁盘上的项目已被删除 例如,如果已经设置了no-cache指令,就是这种情况。 或者用户已清除其缓存,但未从页面导航。 或者清除程序已将其删除,但用户尚未导航。 可能还有5到7个其他方案。

过去,当我不得不做类似的事情时,我强迫Web浏览器(在本例中为IE)使用Fiddler2之类的东西作为代理。 然后,在Fiddler2中,我可以截取针对特定URL的图像请求,并使用C#将它们保存到磁盘中的已知位置。 然后,自动化程序可以从那里获取它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM