现在我有个winform程序,是自动登陆我们学校网站,然后有3个事件,分别是登陆,然后点击查询成绩,最后是查询具体成绩,如何将这3个事件按顺序自动执行(不用我手动点击),附上源代码,最主要还是搞不懂,希望得到大家的帮助
1 //事件1 2 private void btnLogin_Click(object sender, EventArgs e) 3 { 4 Login(); 5 6 } 7 //事件2 8 private void btnClose_Click(object sender, EventArgs e) 9 { 10 //this.Close(); 11 chaXun(); 12 } 13 //事件3 14 private void button1_Click(object sender, EventArgs e) 15 { 16 HtmlDocument frame = wbLogin.Document.Window.Frames["iframeautoheight"].Document; 17 frame.GetElementById("btn_zcj").InvokeMember("click"); 18 } 19 private void Login() 20 { 21 string username = txtUserName.Text; 22 string pwd = txtPwd.Text; 23 string strResponse=""; 24 if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(pwd)) 25 { 26 MessageBox.Show("用户名或者密码不能为空"); 27 } 28 else 29 { 30 HtmlDocument doc = this.wbLogin.Document; 31 doc.All["TextBox1"].SetAttribute("Value", username); 32 doc.All["TextBox2"].SetAttribute("Value", pwd); 33 doc.All["Button1"].InvokeMember("click"); 34 this.wbLogin.AllowNavigation = true; 35 if(wbLogin.ReadyState==WebBrowserReadyState.Complete) 36 { 37 string url = wbLogin.Url.AbsoluteUri; 38 } 39 } 40 } 41 42 private void chaXun() 43 { 44 HtmlDocument doc = this.wbLogin.Document; 45 doc.InvokeScript("GetMc", new string[] { "查询成绩" }); 46 HtmlElementCollection a= doc.GetElementsByTagName("a"); 47 a[10].InvokeMember("click"); 48 }
既然要自动执行 就不应该放在单击事件里嘛
但是如果放在同一个方法里面,执行了Login();之后,再执行事件2的chaXun();HtmlDocument doc = this.wbLogin.Document;还是事件1的document,但是实际上事件2是登陆成功之后的页面,自然document里面的元素也不同,所以我想问问WebBrowser,还有什么方法可以取得登陆成功后跳转的页面的dom
可以动态注册事件 可以试试多播委托 click+=事件1 click+=事件2.....
好,请问具体代码怎么写呢,就是我源代码里面,写出来就OK了
@xhhha123: 你可以参考这两篇文章 希望能帮到你:http://www.cnblogs.com/wolf-sun/p/3293150.html
@wolfy: 好的,我马上上去看看
1、休息一会执行,Threed.Sleep(5000);
2、Login之后,先调用WebBrowser.Navigate(...),再执行chaxun;
3、换用HttpRequest来实现。
click+=事件1:你写到+=以后会出现提示,按tab键就可以了