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

本文关键字:访问 缓存 自动化 Explorer Internet | 更新日期: 2023-09-27 18:34:41

我有一个 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=....

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

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

请参阅此处的有关在 C# 中访问 IE 缓存的线程。

具体来说,从问题来看:

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

答案(强调我的(:

你想使用 GetUrlCacheEntryInfo((。

使用 INTERNET_CACHE_ENTRY_INFO 结构的 lpszLocal文件名 从函数返回时。

此外,您的一个前提有缺陷。 有时IE只有一个 磁盘上的映像和项目的内存中表示形式 已删除。 例如,如果无缓存指令具有 已设置。 或者用户已清除其缓存但未从 页面。 或者清道夫已经删除了它,但用户没有 导航。 可能还有 5 到 7 种其他场景。

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