SetAttribute太慢,后面的InvokeMember被程序忽略

本文关键字:程序 InvokeMember 太慢 SetAttribute | 更新日期: 2023-09-27 17:53:34

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

为了简化任务,我试着做了一个表单,将去谷歌,使用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");

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

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

我真的很感激任何帮助,提前感谢!

SetAttribute太慢,后面的InvokeMember被程序忽略

最终"System.Threading.Thread.Sleep(150);"不起作用,我注意到由于某些原因

在(webBrowser1

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

在Web浏览器完全加载之前终止自身。为了确保页面被加载,我所做的是创建一个名为"wait"的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并设置它的"completed"事件为wait=false;