private void Form1_Load(object sender, EventArgs e)
        {
            SHDocVw.WebBrowser wb = (SHDocVw.WebBrowser)webBrowser1.ActiveXInstance;
            wb.BeforeNavigate2 += new SHDocVw.DWebBrowserEvents2_BeforeNavigate2EventHandler(WebBrowser_BeforeNavigate2);
                   }
        private void WebBrowser_BeforeNavigate2(object pDisp, ref object URL, ref object Flags,ref object TargetFrameName, ref object PostData, ref object Headers, ref bool Cancel)
        {
            //本意是想把得到了postdata经过修改后再提交,,可是在这里。提交的postdata是未经修改的..问题就在此了
            string postDataText = System.Text.Encoding.ASCII.GetString(PostData as byte[]);
            postDataText = postDataText.Replace(textBox3.Text, textBox4.Text);
            PostData = System.Text.Encoding.ASCII.GetBytes(postDataText);
            textBox2.Text = postDataText;
        }

解决方案 »

  1.   

    尽量在WebBrowser_DocumentCompleted在这个方法里处理事件。。然后去赋值。。
      

  2.   

    楼主,我和你是一样的问题,现在解决了一半,给你参考一下
            WebBrowser TestwebBrowser;
            private void TestwebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                HtmlElement ClickBtn = null;
                if (e.Url.ToString().ToLower().IndexOf("XXX.php") > 0)   //登陆页面
                {
                    HtmlDocument doc = TestwebBrowser.Document;
                    for (int i = 0; i < doc.All.Count; i++)
                    {
                        //this.tbShowInformation.Text = doc.All[i];
                        if (doc.All[i].TagName.ToUpper().Equals("INPUT"))
                        {
                            switch (doc.All[i].Name)
                            {
                                case "p_handle":          //查看网站的源程序,找到输入用户名的地方,我这找到的是:p_handle
                                    doc.All[i].InnerText = "用户名";
                                    break;
                                case "p_password":          //查看网站的源程序,找到输入密码的地方,我这找到的是:p_password
                                    doc.All[i].InnerText = "密码";
                                    break;
                                case "????":          //查看网站的源程序,找到提交的按钮地方,我这一直没找到
                                    ClickBtn = doc.All[i]; //提交按钮
                                    break;
                            }
                        }
                    }
                    ClickBtn.InvokeMember("Click");   //执行按扭操作
                }        } 注意:目前我的问题是,可以自动填入用户名、密码,但是因为没有找到提交的按钮,就是下面的这一句:
    case "????":          //查看网站的源程序,找到提交的按钮地方,我这一直没找到我在一个.php的网站上,网站的提交按钮,不知道那一句写在哪,看网页源码看不到(我没找到,郁闷中),如果找到就可以提交了,又不想用模拟鼠标去点击。。
      

  3.   


     //查看网站的源程序,找到提交的按钮地方,我这一直没找到
    这个地方不能找input里面的内容,要找button 或者 submit
      

  4.   

    if (PostData != null)
                {
                    //                
                      string postDataText = System.Text.Encoding.ASCII.GetString(PostData as byte[]);
                    postDataText = PostData.ToString();
                    PostData = (object)postDataText;
                    //转换 现在调用
                   wb.Navigate2(URL, Flags, TargetFrameName, PostData, Headers);
                   
                }