C#和Internet Explorer的自动化,访问缓存(C# and Internet Expl

2019-07-29 11:45发布

我在C#中的Internet Explorer的自动化脚本,它的工作原理确定,但我想访问captcha图像验证码链接每次被访问时返回的重建图像,并且因为浏览器已经访问过它再次访问过它会误事,所以我试图找到图像中的浏览器在磁盘上缓存用下面的代码

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=....

和所有它的作用是重新审视和获得新的形象。 我有什么做的似乎是以某种方式访问​​浏览器是显示图像,这可能是唯一的记忆,我该怎么办呢?

Answer 1:

在这里看到这个线程在C#中访问IE缓存 。

具体地,从这样一个问题:

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

而答案(重点煤矿):

你想用GetUrlCacheEntryInfo() 。

在从函数返回使用INTERNET_CACHE_ENTRY_INFO结构的lpszLocalFileName。

此外,你的前提之一是有缺陷的。 有时IE仅具有图像的内存中表示并在磁盘上的项目已被删除 。 这种情况如果,例如no-cache指令已设置。 或者用户清除其缓存而不是从页面导航。 或清除已删除,但用户还没有导航。 还有其他可能5至7分的情况也是如此。

在当我不得不做类似的事情过去,我强迫网络浏览器(IE在这种情况下)使用类似Fiddler2作为代理。 在Fiddler2,然后我就可以对特定的网址,并使用C#的图像请求拦截将它们保存到磁盘中的已知位置。 然后,自动化程序可以从那里抓住他们。



文章来源: C# and Internet Explorer automation, accessing the cache