2016-04-16 36 views
2
私はC#で、私はwebBrowser1.Document.Body <body>タグ内のすべての「データ」を呼び出すときに理解している何のため

WebBrowser.Bodyは常にnullを返します

が返されるべきブラウザウィンドウを開くために、データを読み書きしようとしています

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

あなたは完全にターゲットURLをロードするためにWebブラウザーを待たなければならないが、あなたは直接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を確認する必要があります:私はURLをチェックについてあなたのソリューションを好き

webBrowser1.Navigate(myUri); 

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

が、あなたは常に頼る必要があります'DocumentCompleted'イベントには、ドキュメントが完全にロードされたことを知るための最良のイベントとして表示されます。これを回避するには回避策が一度しかない/ 'Login()'を一度実行してください。 –

+0

ご迷惑をおかけして申し訳ありません。私はその単純さのためだけに最初のアプローチを提案しました。 –

関連する問題