WebBrowser - Windows Forms компонета, позволяющая пользователям перемещаться по вебстраницам в форме приложения
Описания базовых свойств и методов можно прочитать в
официальной документации
Каким образом отследить 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)
{
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 ;
}
|
Еще один способ рассмотрен дальше.
Как дождаться загрузки страницы полностью?
Более эффективным вариантом дождаться полного окончания загрузки страницы является вариант с использованием свойства 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://msug.vn.ua/Posts/Details/3769