请问为什么我把网页输出的结果添加到listbox1,这里没有被执行呢?要点击两次button3按钮他才会执行。
我想做个百度指数的查询工具,用chinaz的查询页面,给输入框赋值并点击按钮后网页会列出结果,我想把这些结果添加到listbox1 但不知道他为什么没有执行,不太明白事件的原理,大大们解答下啊 谢谢。  private void button3_Click(object sender, EventArgs e)
        {
            //URL=http://tool.chinaz.com/baidu/words.aspx
            //给输入框赋值并点击查询按钮,点击后网页会增加一些html元素,也就是点击后输出的结果
            webBrowser1.Document.GetElementById("kw").InnerText = textBox1.Text;
            webBrowser1.Document.GetElementsByTagName("input")[1].InvokeMember("click"); 
            //把结果添加listbox1(以下的代码没有被执行)
            if (webBrowser1.ReadyState==WebBrowserReadyState.Complete)
            {
                HtmlElementCollection htma = webBrowser1.Document.Links;
                HtmlElement htm;
                foreach (HtmlElement item in htma)
                {                    if (item.InnerHtml.Contains(textBox1.Text))
                    {
                        listView1.Items.Add(item.InnerText);  
                    }
                }
            }
            
        }

解决方案 »

  1.   

       ------把下面代码放到documentcompleted事件里试试看 if (e.Url.AbsoluteUri == "http://www.baidu.com/")
                {
                    webBrowser1.Document.GetElementById("kw").InnerText = textBox1.Text;
                    webBrowser1.Document.GetElementsByTagName("input")[1].InvokeMember("click");
                    //把结果添加listbox1(以下的代码没有被执行)
                    if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
                    {
                        HtmlElementCollection htma = webBrowser1.Document.Links;
                        HtmlElement htm;
                        foreach (HtmlElement item in htma)
                        {                        if (item.InnerHtml.Contains(textBox1.Text))
                            {
                                MessageBox.Show(item.InnerText);
                            }
                        }
                    }
                }
      

  2.   

    谢谢3楼的回答,可是不行哦。
    无意中发现要在执行完模拟点击后加个Messbox.show弹出对话框 ,再点了确认才会继续执行下去,但这样好别扭。 private void button3_Click(object sender, EventArgs e)         {             //URL=http://tool.chinaz.com/baidu/words.aspx             webBrowser1.Document.GetElementById("kw").InnerText = textBox1.Text;             webBrowser1.Document.GetElementsByTagName("input")[1].InvokeMember("click");             MessageBox.Show("查询完成");            if (webBrowser1.ReadyState==WebBrowserReadyState.Complete)             {                 HtmlElementCollection htma = webBrowser1.Document.Links;                 HtmlElement htm;                 foreach (HtmlElement item in htma)                 {                       if (item.InnerHtml.Contains(textBox1.Text))                     {                         listView1.Items.Add(item.InnerText);                       }                 }             }                       } 
      

  3.   

    重发下 没写成功  private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
                {
                    webBrowser1.Document.GetElementById("kw").InnerText = textBox1.Text;
                    webBrowser1.Document.GetElementsByTagName("input")[1].InvokeMember("click");
                }
                //把结果添加listbox1
             MessageBox.Show("对话框");
                if (webBrowser1.DocumentText.Contains("没有找到相关的关键字"))
                {           
                    HtmlElementCollection htma = webBrowser1.Document.Links;
                    int acont = 0;
                    foreach (HtmlElement item in htma)
                    {
                        if (item.InnerHtml.Contains(textBox1.Text))
                        {
                            listView1.Items.Add(item.InnerText);
                            acont++;
                        }
                    }
               }
            }
      

  4.   

    因为你通过button按钮模拟执行了Click函数的,此时点击完之后,页面并没有执行完的,所以只能在第二次点击按钮时才会执行的,你可以在WebBrowser_DocumentCompleted 事件中模拟点击click按钮,即下面的代码:private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
                {
                    webBrowser1.Document.GetElementById("kw").InnerText = textBox1.Text;
                    webBrowser1.Document.GetElementsByTagName("input")[1].InvokeMember("click");
                }
    }然后在Button_Click事件中去把结果添加到Listbox1中,如:private void button3_Click(object sender, EventArgs e)
            {
                //把结果添加listbox1(以下的代码没有被执行)
                if (webBrowser1.ReadyState==WebBrowserReadyState.Complete)
                {
                    HtmlElementCollection htma = webBrowser1.Document.Links;
                    HtmlElement htm;
                    foreach (HtmlElement item in htma)
                    {
     
                        if (item.InnerHtml.Contains(textBox1.Text))
                        {
                            listView1.Items.Add(item.InnerText);  
                        }
                    }
                }
                 
            }
      

  5.   


    可以了谢谢,应该是把模拟点击放在button按钮里面,再在WebBrowser_DocumentCompleted 事件里判断,再添加结果到listbox1吧
      

  6.   


    但我发现这样写,有时并没有把模拟点击后输出的结果添加到listbox里,这是webBrowser1_DocumentCompleted事件没有被触发吗
    我是这样写的:  int webcont = 0;
            private void checkBut_Click_1(object sender, EventArgs e)
            {
                if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
                {
                    webBrowser1.Document.GetElementById("kw").InnerText = textBox1.Text;
                    webBrowser1.Document.GetElementsByTagName("input")[1].InvokeMember("click");
                    webcont++;
                }
            }
            private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                if (webcont == 1)
                {
                    HtmlElementCollection htma = webBrowser1.Document.Links;
                    int acont = 0;
                    foreach (HtmlElement item in htma)
                    {
                        if (item.InnerHtml.Contains(textBox1.Text))
                        {
                            listView1.Items.Add(item.InnerText);
                            acont++;
                        }
                    }
                    for (int i = 0; i <= acont * 3; i++)
                    {
                        string span = webBrowser1.Document.GetElementsByTagName("span")[i].InnerText;
                        Regex reg = new Regex(@"\d+\d");
                        if (span != null)
                        {
                            Match math = reg.Match(span);
                            if (reg.IsMatch(span))
                            {
                                listView1.Items.Add(span);
                            }
                        }
                    }
                    webcont--;
                }
            }