WebBrowser.Body总是返回null



我正在尝试读取和写入数据以打开c#中的浏览器窗口

当我调用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
}

这是因为文档尚未完成加载。按以下方式处理DocumentCompleted事件:-

webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(IsLoadComplete);
private void IsLoadComplete(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    Login();
}

您应该等待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();
}  

最新更新