SetAttribute太慢,程序忽略InvokeMember

时间:2014-03-26 03:51:02

标签: c# visual-studio-2010 webbrowser-control

我是Visual C#的新手,我正在尝试编写自动登录程序。基本上我只需要知道SetAttribute和InvokeMember。

为了简化任务,我尝试制作一个将转到google的表单,使用SetAttribute将查询框更改为用户输入,并使用InvokeMember单击“搜索”按钮。但是,当我尝试按顺序运行时,代码会忽略InvokeMember函数。

这是我的代码:

webBrowser1.Navigate("www.google.com");
while (webBrowser1.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); }
webBrowser1.Document.GetElementById("q").SetAttribute("value", searchTXT.Text);
//MessageBox.Show(webBrowser1.Document.GetElementById("q").GetAttribute("value"));
webBrowser1.Document.GetElementById("btnK").InvokeMember("click");

它基本上忽略了最后一行。但是,当我取消注释消息框时,它可以工作。当我使用单独的按钮进行点击时它也有效,所以最后一行本身应该没问题。

我认为这是一种延迟问题。因此,在调用InvokeMember之前,我必须等待SetAttribute完成其工作。我尝试了一个while循环来放一些延迟,但它没有用。在继续之前有没有办法等待操作完成?这是我问题的真正原因吗?

我真的很感激任何帮助, 在此先感谢!

1 个答案:

答案 0 :(得分:0)

最终" System.Threading.Thread.Sleep(150);"没有用,我注意到由于某种原因

while(webBrowser1.ReadyState!= WebBrowserReadyState.Complete){Application.DoEvents(); }

在Web浏览器完全加载之前终止。为了确保加载页面,我所做的就是创建一个名为&#34的bool变量;等待"。然后我将代码更改为以下内容:

wait = true;
webBrowser1.Navigate("www.google.com");
while (wait==true) { Application.DoEvents(); }
webBrowser1.Document.GetElementById("q").SetAttribute("value", searchTXT.Text);
//MessageBox.Show(webBrowser1.Document.GetElementById("q").GetAttribute("value"));
webBrowser1.Document.GetElementById("btnK").InvokeMember("click");

然后我双击了webBrowser1并将其设置为"已完成" event = wait = false;这对我来说非常好。