2016-04-16 3 views
2

Я пытаюсь читать и записывать данные, чтобы открыть окно браузера в C#WebBrowser.Body всегда возвращает нуль

Для того, что понять, когда я называю webBrowser1.Document.Body все «данные» в <body> теге должны быть возвращены ?

private void Form1_Load(object sender, EventArgs e) 
{ 
    webBrowser1.Navigate("http://cs-bg.info/"); 
    webBrowser1.Navigated += WebBrowser1OnNavigated; 
} 

private void WebBrowser1OnNavigated(object sender, WebBrowserNavigatedEventArgs webBrowserNavigatedEventArgs) 
{ 
    if (webBrowser1.Document == null) 
    { 
     webBrowser1.Refresh(); 
     return; 
    } 

    switch (Action) 
    { 
     case Action.Login: 
      Login(); 
     break; 
    } 
} 

private void Login() 
{ 
    var magic = webBrowser1.Document.Body; // magic is always null 
} 

ответ

0

Это еще не закончило загрузку документа. Обрабатывать событие DocumentCompleted, как показано ниже: -

webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(IsLoadComplete); 

private void IsLoadComplete(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    Login(); 
} 
0

Вы должны ждать WebBrowser для загрузки целевой URL целиком, но вы не можете полагаться на DocumentCompleted событие напрямую! это событие может происходить несколько раз для веб-страницы для любого изображения и другого содержимого страницы.

Вы можете проверить, если страница готова, используя IsBusy свойство:

webBrowser1.Navigate("url"); 
while(webBrowser1.IsBusy) 
Application.DoEvents(); //wait to document be ready 
logOn(); //document is ready so do your task. 

Или используя ReadyState свойства, как и выше. но если вы хотите использовать DocumentCompleted событие, которое вы должны проверить, заполненный URL, чтобы быть такой же, как управление судном URL, а не сценарий или изображения или что-либо другое:

webBrowser1.Navigate(myUri); 

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    if (e.Url.AbsoluteUri != myUri) 
     return; 
    //else do anything 
    logOn(); 
} 
+0

Мне нравится ваше решение о проверке URL, но вы всегда должны полагаться на мероприятии 'DocumentCompleted', так как это лучший способ узнать, когда документ будет полностью загружен. Всегда есть обходные пути только для того, чтобы один раз запустить/запустить 'Login()' один раз. –

+0

спасибо за внимание. Я предложил первый подход только для его простоты. –