C# System.Windows.Forms.WebBrowser

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)
{
    //InitWebBrowser();
    webBrowser.Navigate("http://m.bing.com/");
    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.Navigate("http:///google.com");
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

Комментариев нет:

Отправка комментария

Можете оставить свой комментарий