Как сохранить динамическое изображение в WatIn [duplicate]

1

Я пытаюсь сохранить изображение, которое динамически изменяется с каждым запросом.

Я попробовал 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-страницы без взаимодействия с сервером.

Кто-нибудь знает, как я могу это сделать?

  • 2
    Прочитайте вопрос еще раз, я знаю, что легче отправить мне ссылку на другой ответ, который я все знаю, но проблема в том, что у меня есть ДИНАМИЧНОЕ изображение, я не могу скачать его с запросом, потому что я получу новое / измененное изображение.
  • 0
    Я убрал КУРИТЬ в начале вопроса. Ваш вопрос, вероятно, скоро возобновится. Он находится в очереди на повторное открытие и уже имеет 4 открытых голоса. Просто чтобы ты знал =)
Теги:
httprequest
watin

2 ответа

2
Лучший ответ

Как я понимаю, идея состоит в том, чтобы зафиксировать текущее изображение CAPTCHA на странице в браузере, чтобы обойти его каким-то распознаванием текста (кстати, странная идея). И не проблема получить URL-адрес изображения (он всегда один и тот же). В этом случае вы можете использовать API для доступа к кешу браузера. В частности, для IE FindFirstUrlCacheEntry/FindNextUrlCacheEntry Это может помочь, если ваше приложение размещает WebBrowser.

0

Использовать 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. См. Пример здесь:

Сохранение изображения, отображаемого в веб-браузере

  • 0
    Все еще получая новое изображение, в браузере я вижу одно изображение, но client.DownloadFile сохраняет измененное изображение.
  • 0
    вот ссылка на изображение reporter.gate2shop.com/lib/captcha/… если вы щелкнете по нему, оно будет меняться каждый раз, а запрос и client.download будут приносить вам каждый раз новое изображение, и я не могу загрузить его изображение, которое я вижу в первом запросе.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню