WebBrowser - Windows Forms компонета, позволяющая пользователям перемещаться по вебстраницам в форме приложения
Описания базовых свойств и методов можно прочитать в официальной документации
Первоисточник и прочие полезности: http://msug.vn.ua/Posts/Details/3769
Описания базовых свойств и методов можно прочитать в официальной документации
Каким образом отследить HTTP ошибки
Для этого в проект необходимо добавить библиотеку "Microsoft Internet Contols" (Add Reference -> COM), после чего написать следующий код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| private void Form1_Load(object sender, EventArgs e){ //InitWebBrowser(); var axBrowser = (SHDocVw.WebBrowser)this.webBrowser.ActiveXInstance; axBrowser.NavigateError += new SHDocVw.DWebBrowserEvents2_NavigateErrorEventHandler(axBrowser_NavigateError);}void axBrowser_NavigateError(object pDisp, ref object URL, ref object Frame, ref object StatusCode, ref bool Cancel){ if (StatusCode.ToString() == "404") { MessageBox.Show("Page no found"); }} |
Почему событие DocumentCompleted вызывается несколько раз и как этого избежать?
Это происходит по той причине, что событие DocumentComplete вызывается каждый раз для отдельного фрейма (frame). Таким образом, для корректной работы необходимо добавить дополнительные проверки:
1
2
3
4
5
6
7
8
| void BrowserDocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e){ if (e.Url.AbsolutePath != (sender as WebBrowser).Url.AbsolutePath) return; //The page is finished loading } |
Еще один способ рассмотрен дальше.
Как дождаться загрузки страницы полностью?
Более эффективным вариантом дождаться полного окончания загрузки страницы является вариант с использованием свойства ReadyState:
1
2
3
4
5
6
7
| webBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser_DocumentCompleted);while (webBrowser.ReadyState != WebBrowserReadyState.Complete){ Application.DoEvents();} |
Как сделать скриншот веб-страницы программно?
Для этого есть метод DrawToBitmap:
1
2
3
4
5
6
7
8
9
| void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e){ WebBrowser webBrowser = (WebBrowser)sender; webBrowser.ClientSize = new Size(1024, 800); webBrowser.ScrollBarsEnabled = false; Bitmap image = new Bitmap(webBrowser.Bounds.Width, webBrowser.Bounds.Height); webBrowser.BringToFront(); webBrowser.DrawToBitmap(image, webBrowser.Bounds);} |
Вы не сможете сделать скриншот тех участков веб-страницы, где используется Flash или Silverlight.
На эту тему есть целый проект:http://screenshotsextractor.codeplex.com/
Первоисточник и прочие полезности: http://msug.vn.ua/Posts/Details/3769