2012-05-20 2 views
1

У меня есть сценарий автоматизации Internet Explorer в C#, он работает нормально, но я хочу получить изображение с капчей, ссылка captcha возвращает обновленное изображение при каждом посещении, а так как браузер уже посетил его один раз посетить его снова бы натворить, так что я пытался найти образ в браузеры кэш на диске с помощью следующего кодаАвтоматизация 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=....

и все, что он делает, это пересмотр и получение нового изображения. Мне нужно сделать так, чтобы каким-то образом получить доступ к изображению, отображаемому браузером, которое может быть только в памяти, как я могу это сделать?

+0

Просто отправьте запрос по URL-адресу capcha и проанализируйте изображение самостоятельно –

+0

как я уже сказал, если я отправлю запрос, я получу другое изображение. а не тот, который отображается. – Evan

+0

В прошлом, когда мне приходилось это делать, я запустил Internet Explorer через Fiddler2 и перехватил и сохранил изображения, когда они были запрошены. Будет ли это работать для вас? – yamen

ответ

1

Смотрите эту тему здесь, Accessing IE cache in C#.

В частности, от вопроса:

Поскольку Internet Explorer уже отображаются веб-страницы, изображения на веб-странице уже должны храниться где-то в локальном кэше

И ответ (курсив мин):

Вы хотите использовать GetUrlCacheEntryInfo().

Используйте функцию lpszLocalFileName структуры INTERNET_CACHE_ENTRY_INFO после возврата из функции.

Кроме того, одно из ваших помещений имеет недостатки. Иногда IE имеет только в памяти изображения, а элемент на диске был удален. Это так, если, например, была установлена ​​директива no-cache . Или пользователь очистил свой кеш, но не перешел с страницы . Или мусорщик удалил его, но пользователь не выполнил навигацию . Есть, вероятно, 5-7 других сценариев.

В прошлом, когда я должен был сделать что-то подобное, я заставить веб-браузер (IE в данном случае), чтобы использовать что-то вроде Fiddler2 как прокси-сервер. В Fiddler2 я могу перехватить запросы изображения для определенного URL-адреса и использовать C# для сохранения их на диск в известном месте. Затем программа автоматизации может захватить их.

+0

Thnx yamen, я проверю его и дам вам знать. – Evan

+0

Поскольку я никогда не делал этого раньше, можете ли вы предложить учебник или что-то, что бы ускорить работу. – Evan