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
Комментариев нет:
Отправить комментарий
Можете оставить свой комментарий