none
为什麽webbrowser返回为空? RRS feed

  • 问题

  •  private void button1_Click(object sender, EventArgs e)
            {
                if (!NetworkUtil.IsConnectedInternet())
                {
                    MessageBox.Show("本机已脱网网!");
                    return;
                }
                this.webBrowser1.Url = new Uri("http://www.kuaipan.cn/index.php?ac=account&op=login"); //金山快盘的网址
                this.webBrowser1.Navigate(new Uri("http://www.kuaipan.cn/index.php?ac=account&op=login")); //打开链接
                System.Windows.Forms.HtmlDocument document = this.webBrowser1.Document;
                if (document == null)
                {
                    MessageBox.Show(this.webBrowser1.Url.ToString());
                    return;
                }
    
                HttpWebRequestHelper httpWebRequest = new HttpWebRequestHelper();
                httpWebRequest.Post("bai", "ni");
            
    
    
                //document.All["userName"].SetAttribute("value", "xxxxx@163.com"); //用户名
                //document.All["userPwd"].SetAttribute("value", "xxx"); //密码
                //document.All["submit"].InvokeMember("click"); //登录按钮的click方法 
    
            }

    System.Windows.Forms.HtmlDocument document = this.webBrowser1.Document;

    为什麽document 变量为空?我哪里调用错了?我按照网上的方式一步一步来做的


    给我写信: QQ我:点击这里给我发消息


    2012年4月23日 16:32

答案

  • 确实可以填入邮箱名,密码但是就是登录不了


    给我写信: QQ我:点击这里给我发消息

    确实如此哦……我发现那个submit按钮貌似没有id哦……——

     <input type="submit"  tabindex="3" value=""  class="btn-login ti" />

    那么尝试这样做:

    void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                WebBrowser wb = (WebBrowser) sender;
                System.Windows.Forms.HtmlDocument document = wb.Document;
    
                if (document == null)
                {
                    //MessageBox.Show(this.webBrowser1.Url.ToString());
                    return;
                }
    
                HtmlElementCollection hec = document.All;
                foreach (HtmlElement he in hec) //轮循
                {
                    string id = he.Id;
    
                    
                    if ((id == "userName") || (id == "userPwd") || (id == "submit")) //减少处理
                    {
                        switch (id)
                        {
    
                            case "userName": he.SetAttribute("value", "你的邮箱"); break;
    
                            case "userPwd": he.SetAttribute("value", "1234567890");
    
                                break; //赋密码
                            default:
                                break;
                        }
                    }
    
                }
                wb.Document.Forms["loginform"].InvokeMember("submit");
                           
            }

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年4月25日 3:06
    版主

全部回复

  • WebBrowser.Navigate 异步载入方法。

    用WebBrowser.DocumentCompleted

    事件中处理后续代码。


    DON'T TRY SO HARD,THE BEST THINGS COME WHEN YOU LEAST EXPECT THEM TO.

    2012年4月24日 1:34
  • 确定下你是否在webbrower中打开了这个网址,是不是这个页面需要先登录


    http://blog.csdn.net/zx13525079024

    2012年4月24日 2:05
  • WebBrowser.Navigate 异步载入方法。

    用WebBrowser.DocumentCompleted

    事件中处理后续代码。


    DON'T TRY SO HARD,THE BEST THINGS COME WHEN YOU LEAST EXPECT THEM TO.

    正解!补充说明(代码):

    private void button1_Click(object sender, EventArgs e) { if (!NetworkUtil.IsConnectedInternet()) { MessageBox.Show("本机已脱网网!"); return; }
    this.webBrowser1.DocumentComplete+=new WebBrowserDocumentCompletedEventHandler(CompleteDocument);  this.webBrowser1.Navigate(new Uri("http://www.kuaipan.cn/index.php?ac=account&op=login")); //打开链接 }

    随后你应该在DocumentComplete事件中:

    private void CompleteDocument(object sender,
        WebBrowserDocumentCompletedEventArgs e)
    {
        WebBrowser wb = (WebBrowser)sender;
       //做你做的事情呗……
    }

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处


    2012年4月24日 2:24
    版主
  • 我再试一下

    给我写信: QQ我:点击这里给我发消息

    2012年4月24日 4:05
  • 调试的时候为null,name ,id等属性,本来很有雄心壮志的做个自动登录器,或者发帖工具的,哎。。。。


    给我写信: QQ我:点击这里给我发消息

    2012年4月24日 6:06
  • 2012年4月24日 6:07
    版主
  • 下载地址:http://files.cnblogs.com/lyhabc/SignInProgram.rar

    给我写信: QQ我:点击这里给我发消息

    2012年4月24日 6:20
  • 删除原先的Navigate事件,这样做:

    namespace SignInProgram
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                if (!NetworkUtil.IsConnectedInternet())
                {
                    MessageBox.Show("本机已脱网!");
                    return;
                }
               
                this.webBrowser1.Navigate(new Uri(@"http://www.kuaipan.cn/index.php?ac=account&op=login")); //打开链接
            }
    
            /// <summary>
            /// 完成html页面加载
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                WebBrowser wb = (WebBrowser) sender;
                System.Windows.Forms.HtmlDocument document = wb.Document;
    
                if (document == null)
                {
                    //MessageBox.Show(this.webBrowser1.Url.ToString());
                    return;
                }
    
                HtmlElement log_btn = null;
                HtmlElementCollection hec = document.All;
                foreach (HtmlElement he in hec) //轮循
                {
                    string id = he.Id;
    
                    if ((id == "userName") || (id == "userPwd") || (id == "submit")) //减少处理
                    {
                        switch (id)
                        {
    
                            case "userName": he.SetAttribute("value", "邮箱地址.com");
    
                                break; //赋用户名
    
                            case "userPwd": he.SetAttribute("value", "1234567890");
    
                                break; //赋密码
    
                            case "submit":
                                {
                                    log_btn = he;
                                    log_btn.InvokeMember("Click"); //触发submit事件     
                                    break; //获取submit按钮
                                }
                            default:
                                break;
                        }
                    }
                }           
            }
        }
    }

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年4月24日 6:29
    版主
  • weidong大侠我刚才调试的时候发现这段代码没有运行到

    case "submit":
                                {
                                    log_btn = he;
                                    log_btn.InvokeMember("Click"); //触发submit事件     
                                    break; //获取submit按钮
                                }
    

    我查看了一下金山快盘的html

    <div class="account-frm clearfix">
              <input type="submit"  tabindex="3" value=""  class="btn-login ti" />
              <a href="javascript:;"  id="qqlogin" class="pt10" title="使用QQ登录快盘" ><b class="ico ico-qq"></b>使用QQ账号登录</a> 
            </div>
    <div class="account-splite">
    <p class="ml120">
    · 还没有快盘账号? <a href="http://www.kuaipan.cn/account_register.htm" title="注册快盘账号" class="b">立即注册</a><br />
    <span class="orange f12">· webqq用户请选择使用qq帐号登录</span>
    </p>
    </div>
    <input type="hidden" value="true" name="submited" />
          </form>
        </div>
    发现有一个submit,一个submited,而且登录的时候我用Fiddler2来查看,他是用443端口的,是不是金山快盘加密了的问题还是代码的问题呢?

    给我写信: QQ我:点击这里给我发消息

    2012年4月24日 9:27
  • 确实可以填入邮箱名,密码但是就是登录不了


    给我写信: QQ我:点击这里给我发消息

    2012年4月24日 9:30
  • 确实可以填入邮箱名,密码但是就是登录不了


    给我写信: QQ我:点击这里给我发消息

    确实如此哦……我发现那个submit按钮貌似没有id哦……——

     <input type="submit"  tabindex="3" value=""  class="btn-login ti" />

    那么尝试这样做:

    void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                WebBrowser wb = (WebBrowser) sender;
                System.Windows.Forms.HtmlDocument document = wb.Document;
    
                if (document == null)
                {
                    //MessageBox.Show(this.webBrowser1.Url.ToString());
                    return;
                }
    
                HtmlElementCollection hec = document.All;
                foreach (HtmlElement he in hec) //轮循
                {
                    string id = he.Id;
    
                    
                    if ((id == "userName") || (id == "userPwd") || (id == "submit")) //减少处理
                    {
                        switch (id)
                        {
    
                            case "userName": he.SetAttribute("value", "你的邮箱"); break;
    
                            case "userPwd": he.SetAttribute("value", "1234567890");
    
                                break; //赋密码
                            default:
                                break;
                        }
                    }
    
                }
                wb.Document.Forms["loginform"].InvokeMember("submit");
                           
            }

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年4月25日 3:06
    版主
  • 好的,我试一下,如果成功就选你为答案

    给我写信: QQ我:点击这里给我发消息

    2012年4月25日 9:44
  • 又有问题了,我登录进去之后不知道怎样点击那个签到按钮:

    金山快盘签到按钮的html代码:

     <li><a href="index.php?ac=fileview&op=recycle"  ><span>回收站</span></a></li>
          </ul>
          <!--签到 S--> 
      <a href="#" id="usersignlink" class="dn">签到</a> 
          <!--签到 E--> 
        </div>
        <!--topnav E--> 
      </div>
    </div>
    <!--breadcrumb S-->
    <div class="mid">
      <h2 class="f12">
        <a href="index.php?ac=fileview&withdel="><b class="ico-bc"></b>我的快盘</a>
      <span class="ico-nav"></span>
                    </h2>
    </div>
    <!--breadcrumb E--> 
    <div id="container" class="container" onselectstart="return false;"> 
      <!--toolbar S-->
      <div class="toolbar mid" id="kuaipantoolbar">
         <div class="clearfix">
            <div class="l">
    <a class="btn-127 btn-upload-127 ti l mr10" href="javascript:;"  id="uploadbnt" >上传文件</a>


    给我写信: QQ我:点击这里给我发消息

    2012年4月27日 1:27
  • 仍旧在WebBrowser的DocumentCompleted中这样写呗:

    wb.Document.GetElementById("usersignlink").InvokeMember("click");

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年4月27日 1:39
    版主
  • 我做了一遍,至少在我这里完全可以!

    namespace SignInProgram
    {
        public partial class Form1 : Form
        {
            /// <summary>
            /// 获取SignButton
            /// </summary>
            private HtmlElement SignButton { get; set; }
            private bool IsSigned { get; set; }
    
            public Form1()
            {
                InitializeComponent();
                IsSigned = false;   //默认没有签到
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                if (!NetworkUtil.IsConnectedInternet())
                {
                    MessageBox.Show("本机已脱网!");
                    return;
                }
    
                this.webBrowser1.Navigate(new Uri(@"http://www.kuaipan.cn/index.php?ac=account&op=login")); //打开链接
                this.webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
    
            }
    
            /// <summary>
            /// 完成html页面加载
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                if (!IsSigned)
                {
                    WebBrowser wb = (WebBrowser)sender;
                    if (wb.ReadyState == WebBrowserReadyState.Complete)
                    {
                        SignButton = wb.Document.GetElementById("usersignlink");
    
                        if (SignButton == null)
                        {
                            System.Windows.Forms.HtmlDocument document = wb.Document;
    
                            if (document == null)
                            {
                                //MessageBox.Show(this.webBrowser1.Url.ToString());
                                return;
                            }
    
                            HtmlElementCollection hec = document.All;
                            foreach (HtmlElement he in hec) //轮循
                            {
                                string id = he.Id;
    
    
                                if ((id == "userName") || (id == "userPwd") || (id == "submit")) //减少处理
                                {
                                    switch (id)
                                    {
    
                                        case "userName": he.SetAttribute("value", "m@microsoft.com"); break;
    
                                        case "userPwd": he.SetAttribute("value", "123456");
    
                                            break; //赋密码
                                        default:
                                            break;
                                    }
                                }
    
                            }
                            wb.Document.Forms["loginform"].InvokeMember("submit");
                        }
    
                        else
                        {
                            //否则进入签到页面
                            IsSigned = true;
                            SignButton.InvokeMember("Click");
                            Thread.Sleep(3000);
                        }
                    }
                }
    
            }
        }
    }

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处



    2012年4月27日 3:09
    版主
  • 还是不行,算了,放弃了

    给我写信: QQ我:点击这里给我发消息

    2012年4月27日 9:10
  • 还是不行,算了,放弃了

    给我写信: QQ我:点击这里给我发消息


    我可以的啊……我注册了两个帐号都实验过可以的……怎么你就不可以呢??

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年4月27日 9:12
    版主
  • 不行啊..不知道是不是网速问题 ,哎。。。

    给我写信: QQ我:点击这里给我发消息

    2012年4月27日 9:35
  • 不行啊..不知道是不是网速问题 ,哎。。。

    给我写信: QQ我:点击这里给我发消息

    我也怀疑……这样,你到家换个网速快的地方再试试看。或者把Thread.Sleep(更长时间);

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年4月27日 11:46
    版主
  • 只能等明天才能签到了,而且宿舍网速也是很慢,我尝试把  Thread.Sleep(更长时间)   明天

    给我写信: QQ我:点击这里给我发消息

    2012年4月27日 12:58
  • 还是不行,我设置了睡眠6秒 、8秒, 把代码转换一下位置也不行


    给我写信: QQ我:点击这里给我发消息

    2012年4月28日 1:17
  • 这样,你先把我第一个登录的回答标记为答案,第二个暂时取消。得空给你远程看看那。因为我这里确实可以的……

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年4月28日 1:41
    版主
  • 好 ,标记了

    给我写信: QQ我:点击这里给我发消息

    2012年4月28日 5:20
  • 好 ,标记了

    给我写信: QQ我:点击这里给我发消息

    OK,谢谢!

    另外你换一个网速较好的地方测试我第二个部分的代码!谢谢配合……^_^


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年4月28日 9:42
    版主