Скриншоты сайтов на .Net

Как оказалось делать скриншоты сайтов не такая уж и простая задача. Но выход из нее можно найти создавая отдельным потоком скрытую форму с объектом WebBrowser и используя некоторые компоненты MS IE7+.
Ниже идет малокомментированный код, который подскажет Вам, как это правильнее всего сделать. Если есть вопросы, то гуглите и разбирайтесь в документации:
Copy Source | Copy HTML
  1. #region private event handlers
  2.  
  3.  
  4.     /// <summary>
  5.     /// События результата открытия страницы в браузере _webBrowser.Navigate(url.OriginalString);
  6.     /// </summary>
  7.     private unsafe void OnDocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
  8.     {
  9.         WebBrowser browser = (sender as WebBrowser);
  10.         if (browser != null)
  11.         {
  12.             if(!browser.DocumentText.Contains("<!--Error Body-->"))//если открылось
  13.             {
  14.                 int width = browser.Document.Body.ScrollRectangle.Size.Width;
  15.                 int height = browser.Document.Body.ScrollRectangle.Size.Height;
  16.                 this.Size = browser.Document.Body.ScrollRectangle.Size;
  17.                 this.ClientSize = browser.Document.Body.ScrollRectangle.Size;
  18.  
  19.                 this.Height = 10;
  20.                 this.Width = 20;
  21.                 browser.Width = width;
  22.                 this.Top = -200;
  23.                 browser.Top = -100;
  24.                 browser.Height = 5000;//height;
  25.                 panel.AutoScrollPosition = new Point(300, 300);
  26.                 this.Refresh();
  27.                 //повторный рендеринг страницы тут нужен
  28.                 back.RunWorkerAsync();
  29.             }
  30.         }
  31.     }
  32.  
  33.     void back_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  34.     {
  35.         WebBrowser browser = this._webBrowser;
  36.         if (browser != null)
  37.         {
  38.             if (!browser.DocumentText.Contains("<!--Error Body-->"))
  39.             {
  40.                 int width = browser.Document.Body.ScrollRectangle.Size.Width;
  41.                 int height = browser.Document.Body.ScrollRectangle.Size.Height;
  42.                 //объект из IE7+
  43.                 mshtml.IHTMLDocument2 document = (browser.Document.DomDocument as mshtml.IHTMLDocument2);
  44.  
  45.                 if (document != null)
  46.                 {
  47.                     mshtml.IHTMLElement element = (document.body as mshtml.IHTMLElement);
  48.                     if (element != null)
  49.                     {
  50.                         IHTMLElementRender render = (element as IHTMLElementRender);
  51.                         if (render != null)
  52.                         {
  53.                             Image img = new Bitmap(width, height);
  54.                             using (Graphics graphics = Graphics.FromImage(img))
  55.                             {
  56.                                 IntPtr hdcDestination = graphics.GetHdc();
  57.                                 render.DrawToDC(hdcDestination);
  58.                                 graphics.ReleaseHdc(hdcDestination);
  59.                               //  browser.DrawToBitmap((Bitmap)img, new Rectangle(0, 0, width, height));
  60.                                 string FileName = wheretosave;
  61.                                 _webBrowser.DrawToBitmap((Bitmap)img, new Rectangle(0, 0, width, height));
  62.                                 img.Save(FileName);
  63.                             }
  64.                         }
  65.                     }
  66.                 }
  67.             }
  68.         }
  69.         this.Close();
  70.     }
  71.  
  72.     void back_DoWork(object sender, DoWorkEventArgs e)
  73.     {
  74.         Thread.Sleep(5000);
  75.     }
  76.  
  77.     #endregion

Метки:   Категории:Csharp | Code


blog comments powered by Disqus

Добавить комментарий

Кто я?

Программист. Я слежу за блогосферой и знаю, как будет развиваться интернет. Когда у меня есть время я даже прилагаю для этого усилия. Подробнее

Последние комментарии

Не отображать

Topbot at FeedsBurner

Облако тэгов

Мои Твиты

Twitter марта 20, 20:32
⚫️Тематика черного цвета для России http://dlvr.it/R1DKm7 https://twitter.com/f1ashr/status/1108466259765555200/photo/1

Twitter марта 20, 20:32
Автоматическое информирование о выходе новых сезонов http://dlvr.it/R1DKlZ

Twitter марта 20, 20:32
Голосовой набор тэгов http://dlvr.it/R1DKlv

Twitter марта 19, 20:27
Ради дружбы с Индией http://dlvr.it/R18YMd

Twitter марта 19, 20:27
Вконтакте 7 лет http://dlvr.it/R18YKm

Twitter марта 19, 20:27
Разбор фильма Дивергент2 Инсургент http://dlvr.it/R18YLy https://twitter.com/f1ashr/status/1108102729656762369/photo/1

Twitter марта 15, 12:51
Фильтр по стране на Ютубе http://dlvr.it/R0tgZq https://twitter.com/f1ashr/status/1106538299487739905/photo/1

Twitter марта 14, 12:25
Роскомнадзор и Криптовалюты http://dlvr.it/R0pqG6

Twitter марта 5, 19:59
Россияне встречают рассвет индийской йогой http://dlvr.it/R0DszD https://twitter.com/f1ashr/status/1103022131506425856/photo/1

Twitter февраля 24, 09:53
Что интересного есть в греческом языке? http://dlvr.it/QzZ2dK

Twitter февраля 24, 09:53
Ретро-поезд на угле с надписью СССР http://dlvr.it/QzZ2cT https://twitter.com/f1ashr/status/1099608139756843009/photo/1

Twitter февраля 24, 09:53
Следующий шаг криптовалют http://dlvr.it/QzZ2Y4 https://twitter.com/f1ashr/status/1099608134694256641/photo/1

Twitter февраля 23, 09:49
Рутин тутин Путин http://dlvr.it/QzWBXG

Twitter февраля 23, 09:49
Индия: Чем славится индийская культура? http://dlvr.it/QzWBVK https://twitter.com/f1ashr/status/1099244865022357506/photo/1

Twitter февраля 23, 09:49
Главное изменение в Твиттере http://dlvr.it/QzWBX9

Twitter февраля 12, 09:04
Роскомнадзор достучался до Azure http://dlvr.it/QyjSPS

Twitter февраля 6, 07:58
Про жизнь в Южной Осетии http://dlvr.it/QyHTwx

Twitter февраля 6, 07:58
Хиллари против Трампа в Америке и приход женщин во власть http://dlvr.it/QyHTxG https://twitter.com/f1ashr/status/1093056334906281985/photo/1

Twitter февраля 6, 07:58
Powering Down Google Reader http://dlvr.it/QyHTvM

Twitter февраля 4, 22:48
Разбор сериала Медичи: Повелители Флоренции http://dlvr.it/QyBKWh https://twitter.com/f1ashr/status/1092555544953466880/photo/1

Мой твиттер

Копирайт

Все мысли, высказанные в блоге, являются моим мнением и за это мнение меня никто не забанит! Кроме того, никто не имеет право копировать материалы блога без использования ctrl+C/V!

© Copyright 2008