Я пытаюсь сохранить изображение, которое динамически изменяется с каждым запросом.
Я попробовал WatIn и HttpWebRequest
(получив новое изображение)
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("www.test.com");
request.AllowAutoRedirect = false;
WebResponse response = request.GetResponse();
using (Stream stream = response.GetResponseStream())
using (FileStream fs = File.OpenWrite(ImageCodePath))
{
byte[] bytes = new byte[1024];
int count;
while ((count = stream.Read(bytes, 0, bytes.Length)) != 0)
{
fs.Write(bytes, 0, count);
}
}
и (User32.dll) URLDownloadToFile (получение нового изображения)
[DllImport("urlmon.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern Int32 URLDownloadToFile(Int32 pCaller, string szURL, string szFileName, Int32 dwReserved, Int32 lpfnCB);
URLDownloadToFile(0, "https://test.reporterImages.php?MAIN_THEME=1", ImageCodePath, 0, 0);
Я просмотрел все временные папки и до сих пор не могу найти изображение.
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.InternetCache),"Content.IE5");
Каждый раз, когда я пытаюсь его сохранить, сервер создает новое изображение и возвращает его. Если я щелкнул правой кнопкой мыши по изображению и выберем:
Сохранить изображение как...
Он сохранит изображение. Мне нужно каким-то образом реализовать этот метод (щелкните правой кнопкой мыши, сохраните изображение как...) в WatIn в IE или каким-то образом загрузите его с HttpRequest
с моей HTML-страницы без взаимодействия с сервером.
Кто-нибудь знает, как я могу это сделать?
Как я понимаю, идея состоит в том, чтобы зафиксировать текущее изображение CAPTCHA на странице в браузере, чтобы обойти его каким-то распознаванием текста (кстати, странная идея). И не проблема получить URL-адрес изображения (он всегда один и тот же). В этом случае вы можете использовать API для доступа к кешу браузера. В частности, для IE FindFirstUrlCacheEntry/FindNextUrlCacheEntry Это может помочь, если ваше приложение размещает WebBrowser.
Использовать WebClient
:
using (var client = new WebClient())
{
client.DownloadFile("http://cdn.sstatic.net/stackoverflow/img/sprites.png?v=3c6263c3453b", "so-sprites.png");
}
Если вы укажете URL-адрес страницы html
, содержащий img
который вы хотите загрузить, а не напрямую на изображение, вы все равно можете использовать веб-клиент с двумя последовательными запросами. Во-первых, нужно отказаться от URL-адреса изображения из источника страницы (не требуется, если URL-адрес статичен) и второй, чтобы загрузить изображение.
Редактировать:
Сожалею. С самого начала было неясно. Таким образом, вы размещаете браузер в своем приложении, и вы видите фактическое изображение в нем. Вы хотите загрузить изображение, которое видите. Конечно, другой запрос не будет работать, потому что будет создано другое изображение.
Решение зависит от используемого вами управления веб-браузером.
Для WebBrowser
(System.Windows.Forms) вы можете использовать IHTMLDocument2
. См. Пример здесь: