WebBrowser.Body始终返回null

时间:2016-04-16 05:23:54

标签: c#

我正在尝试读取和写入数据以打开c#

中的浏览器窗口

当我调用webBrowser1.Document.Body all&#34; data&#34;应该返回<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
}

2 个答案:

答案 0 :(得分:0)

这是因为文件尚未完成加载。处理DocumentCompleted事件如下: -

webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(IsLoadComplete);

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

答案 1 :(得分:0)

您应该等待WebBrowser完全加载目标网址,但不能直接依赖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();
}