1

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

再訪して新しいイメージを得るだけです。私がしなければならないことは、ブラウザーが表示している画像に何らかの方法でアクセスすることです。これはメモリ内にのみある可能性があります。どうすればそれを行うことができますか?

4

1 に答える 1

1

Accessing IE cache in C#に関するこのスレッドを参照してください。

具体的には、質問から:

Internet Explorer は既に Web ページを表示しているため、Web ページ内の画像はローカル キャッシュのどこかに既に保存されている必要があります。

そして答え(私の強調):

GetUrlCacheEntryInfo()を使用したい。

関数から戻るときに、INTERNET_CACHE_ENTRY_INFO 構造体の lpszLocalFileName を使用します。

さらに、あなたの施設の1つに欠陥があります。 場合によっては、IE にはイメージのメモリ内表現しかなく、ディスク上の項目が削除されていることがあります。これは、たとえば、no-cache ディレクティブが設定されている場合に当てはまります。または、ユーザーがキャッシュをクリアしたが、ページから移動していません。または、スカベンジャーがそれを削除しましたが、ユーザーはナビゲートしていません。おそらく他にも 5 ~ 7 個のシナリオがあります。

過去に似たようなことをしなければならなかったとき、私は Web ブラウザ (この場合は IE) にFiddler2のようなものをプロキシとして使用するように強制しました。Fiddler2 では、特定の URL に対する画像リクエストをインターセプトし、C# を使用してそれらをディスクの既知の場所に保存できます。自動化プログラムは、そこからそれらを取得できます。

于 2012-05-21T02:55:25.037 に答える