首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

关于webbrowser获取网页结果,点击事件的有关问题

2013-07-26 
关于webbrowser获取网页结果,点击事件的问题请问为什么我把网页输出的结果添加到listbox1,这里没有被执行

关于webbrowser获取网页结果,点击事件的问题
请问为什么我把网页输出的结果添加到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);  
                    }
                }
            }
            
        }


[解决办法]
因为你通过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);  
                    }
                }
            }


             
        }

热点排行