关于webbrowser自动登录的问题 小弟不才,平日里多次访问一网站,烦之,遂起念自动登录。本以为嵌入webbrowser控件,添加DocumentCompleted事件,等页面加载完,找到web上的帐户、密码、提交等三元素就可以了。谁知竟然没有。仔细察看网页源代码,原来除了初始登陆页面外,还有一个js文件,所有的页面元素都是由js内的fun动态生成的,遂束手无策,还望坛子里的高手出来指点迷津阿! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 来点提示信息要使我们的WebBrowser具有自动填表、甚至自动提交的功能,并不困难。 假设有一个最简单的登录页面,输入用户名密码,点“登录”按钮即可登录。已知用户名输入框的id(或Name,下同)是username,密码输入框的id是password,“登录”按钮的id是submitbutton,那么我们只需要在webBrowser的DocumentCompleted事件中使用下面的代码即可:HtmlElement btnSubmit = webBrowser.Document.All["submitbutton"]; HtmlElement tbUserid = webBrowser.Document.All["username"]; HtmlElement tbPasswd = webBrowser.Document.All["password"]; if (tbUserid == null || tbPasswd == null || btnSubmit == null) return; tbUserid.SetAttribute("value", "smalldust"); tbPasswd.SetAttribute("value", "12345678"); btnSubmit.InvokeMember("click"); 这里我们用SetAttribute来设置文本框的“value”属性,用InvokeMember来调用了按钮的“click”方法。因为不同的Html元素,其拥有的属性和方法也不尽相同,所以.Net 2.0提供了统一的HtmlElement来概括各种Html元素的同时,提供了这两个方法以调用元素特有的功能。关于各种Html元素的属性和方法一览,可以查阅MSDN的DHTML Reference。 我的登录页面上没有类似<input type="button" id="btnClose" value="关闭" /> 这样的代码,这些都是那个js里面的fun动态生成的,页面虽然能够显示,但是HtmlDocument htmlDoc = webBrowser1.Document获得的HtmlDocument对象只能看到主页面文件的源代码相关信息 这种情况下不要用 webbrowser控件分析页面代码来实现自动登录,你可以用windows的消息机制实现,比如你可以给webbrower控件发送一个sendmessage消息,自动填写登录内容、模拟点击登录按钮就可以。 换一种思路:用HttpWebRequest去登录这个网站。 try http://code.google.com/p/autotester/ HttpWebRequest这个好!不过如果封包加密了就没香头了- - 如果说你实在无法获取到DOM元素,可以尝试直接使用HttpWebRequest发送请求,至于请求的封装格式你可以使用HTTP Sniffer查看本机网络上的HTTP包,只要实际在网页上登录一次,就可以找出HTTP封包格式了. 我觉得,你可以这样考虑。那JS里面的代码分析下。看他是怎么生成的。然后再用C#代码生成就是了。不也一样吗?JS肯定有他的生成规则撒。 看来只有用模拟才行,用httpwebrequest不行啊,网页是返回了,接着操作就不行了。 求一正则表达式 改变窗口大小自动给控件加滚动条 常量中有换行符 如何编写锁定计算机的程序? 转一本《c#高级编程》中文第二版 rmb 20 请教OleDbConnection和SqlConnection的连接字符串如何互相转换 [调查] 请问众星星们什么时候回来上的班?春节过后第一次上网是初几? 请问label控件与textbox控件怎样实现透明背景? 数据库断链的问题!! 提一个关于WEB中数据流的传递问题,就是关于文件上载的,希望知道的来看看 关于c#winform控件重写的几个简单问题 c#那么多命名空间如何记忆?
要使我们的WebBrowser具有自动填表、甚至自动提交的功能,并不困难。 假设有一个最简单的登录页面,输入用户名密码,点“登录”按钮即可登录。已知用户名输入框的id(或Name,下同)是username,密码输入框的id是password,“登录”按钮的id是submitbutton,那么我们只需要在webBrowser的DocumentCompleted事件中使用下面的代码即可:HtmlElement btnSubmit = webBrowser.Document.All["submitbutton"];
HtmlElement tbUserid = webBrowser.Document.All["username"];
HtmlElement tbPasswd = webBrowser.Document.All["password"]; if (tbUserid == null || tbPasswd == null || btnSubmit == null)
return; tbUserid.SetAttribute("value", "smalldust");
tbPasswd.SetAttribute("value", "12345678"); btnSubmit.InvokeMember("click");
这里我们用SetAttribute来设置文本框的“value”属性,用InvokeMember来调用了按钮的“click”方法。因为不同的Html元素,其拥有的属性和方法也不尽相同,所以.Net 2.0提供了统一的HtmlElement来概括各种Html元素的同时,提供了这两个方法以调用元素特有的功能。关于各种Html元素的属性和方法一览,可以查阅MSDN的DHTML Reference。
<input type="button" id="btnClose" value="关闭" />
这样的代码,这些都是那个js里面的fun动态生成的,页面虽然能够显示,但是HtmlDocument htmlDoc = webBrowser1.Document获得的HtmlDocument对象只能看到主页面文件的源代码相关信息
用HttpWebRequest去登录这个网站。