关于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);
}
}
}
}