簡體   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