webBrowser1.Navigate("http://120.199.52.102/sword?tid=WsxtXtzySyxgBLH_init")
webBrowser1.Document.GetElementById("btnLogin").InvokeMember("onclick"); 
报错"为空或者不是对象"
点击"普通用户登录"按钮的代码应该怎么写?

解决方案 »

  1.   

    这里肯定会报空对象的,因为你在执行InvokeMember方法的时候,你页面还没有加载完毕,也就是说你的按钮尚未加载完毕。如果你想自动登录,你需要将webBrowser1.Document.GetElementById("btnLogin").InvokeMember("onclick");
    这句代码写在DocumentCompleted事件中
    如:  void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
                {
                    webBrowser1.Document.GetElementById("btnLogin").InvokeMember("onclick");
                }
            }
      

  2.   

    忘了说明了,我是如下面这样写,仍旧报错"为空或者不是对象"
    private void Form_Load(object sender, EventArgs e)
    {
       webBrowser1.Navigate("http://120.199.52.102/sword?tid=WsxtXtzySyxgBLH_init")
    }private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        webBrowser1.Document.GetElementById("btnLogin").InvokeMember("onclick");  
    }
    可以麻烦各位看下"http://120.199.52.102/sword?tid=WsxtXtzySyxgBLH_init"有何不同吗?我某些网页用上面的语句可以正常运行的,我看关键是这张网页
      

  3.   

    你的事件里面没有判断网页是否加载完毕,需要判断状态的 if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
                {
                    webBrowser1.Document.GetElementById("btnLogin").InvokeMember("onclick");
                }
      

  4.   

    各位,我修改过了,还是不行,仍旧报错"为空或者不是对象",你们手头有没有工具呀,实际执行下看看
    private void Form_Load(object sender, EventArgs e)
    {
                webBrowser1.Navigate("http://120.199.52.102/sword?tid=WsxtXtzySyxgBLH_init")
    }private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
                if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
                {
                    webBrowser1.Document.GetElementById("btnLogin").InvokeMember("onclick");
                }
    }