Картинка из Webbrowser/

Статус
В этой теме нельзя размещать новые ответы.

elcaste

Постоялец
Регистрация
30 Ноя 2007
Сообщения
322
Реакции
175
Имеется VB.NET.
Каким образом можно выдрать отрендеренную картинку из контрола Webbrowser или, на крайний случай, сделать snapshot всей загруженной страницы?
 
У веббраузера есть свойство Document, а у него - метод GetElementsByTagName
Если параметром задать "img", он выгребет со страницы все ссылки на картинки. Дальше только скачать.
Есть пример на с#, но идея, думаю, понятна:

Код:
System.Net.WebClient wc = new System.Net.WebClient();  
HtmlElementCollection imgs = this.webBrowser1.Document.GetElementsByTagName("img");
for (int i = 0; i < imgs.Count; i++)  {
  wc.DownloadFile(imgs[i].GetAttribute("src"), "c:\\images" + i.ToString() + ".jpg");  
}
 
У веббраузера есть свойство Document, а у него - метод GetElementsByTagName
Если параметром задать "img", он выгребет со страницы все ссылки на картинки. Дальше только скачать.
Есть пример на с#, но идея, думаю, понятна:

Код:
System.Net.WebClient wc = new System.Net.WebClient();  
HtmlElementCollection imgs = this.webBrowser1.Document.GetElementsByTagName("img");
for (int i = 0; i < imgs.Count; i++)  {
  wc.DownloadFile(imgs[i].GetAttribute("src"), "c:\\images" + i.ToString() + ".jpg");  
}

Это я знаю, и этот метод отлично подходит со статичной картинкой, но если она при каждом обновлении меняется то...
Нужно достать именно ту, которая загрузилась в контрол.
 
Тогда наверное проще всего сохранить страницу в битмап:

Код:
int width = webBrowser1.Document.Body.ScrollRectangle.Width;
int height = webBrowser1.Document.Body.ScrollRectangle.Height;

Bitmap bmp = new Bitmap(width, height);

webBrowser1.DrawToBitmap(bmp, new Rectangle(0, 0, width, height));
 
Да, MSDN говорит что метод не поддерживается и в редакторе его не подсказывает. Но метод реализован и у меня (VS 2008) компилится и работает.

Думаю в VB тоже должен работать, если правильно описать:

Dim wb As WebBrowserBase
Dim bitmap As Bitmap
Dim targetBounds As Rectangle

wb.DrawToBitmap(bitmap, targetBounds)

Ну а на крайний случай можно заюзать апишные функции, как здесь:
Для просмотра ссылки Войди или Зарегистрируйся
 
Работает! :)
Премного благодарен.
А вот как быть с конкретной картинкой на странице...
Можно, если получить ее координаты на странице и размеры, то можно сфотографировать тем же DrawToBitmap, но где их взять? Или может есть проще способ?
 
Координаты картинки на странице так просто взять не получится, их браузер высчитывает сам и никому не говорит :)
А почему нельзя загружать картинку по ссылке? Вроде самый естественный способ...
 
C капчами так не получится :) Точнее получится, но тогда с запросом капчи нужно слать куки и еще там есть нюансы.
Уже есть PHP скрипт, который работает с сайтами на "текстовом уровне", т.е. от запроса к запросу. В том же Xedant Human Emulator как то изображение забирают...
 
В принципе, если сайт один и тот же, можно просто посчитать координаты капчи на скриншоте и выдирать ее :)

Просто разбираться с загруженными в браузер рисунками - тот еще гемор. Браузер может их оставлять в памяти, может сохранять в кэш. Может и переименовать, если такой же файл уже есть...
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху