小弟不才,平日里多次访问一网站,烦之,遂起念自动登录。本以为嵌入webbrowser控件,添加DocumentCompleted事件,等页面加载完,找到web上的帐户、密码、提交等三元素就可以了。谁知竟然没有。仔细察看网页源代码,原来除了初始登陆页面外,还有一个js文件,所有的页面元素都是由js内的fun动态生成的,遂束手无策,还望坛子里的高手出来指点迷津阿!

解决方案 »

  1.   

    来点提示信息
    要使我们的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。 
      

  2.   

    我的登录页面上没有类似
    <input type="button" id="btnClose" value="关闭" /> 
    这样的代码,这些都是那个js里面的fun动态生成的,页面虽然能够显示,但是HtmlDocument htmlDoc = webBrowser1.Document获得的HtmlDocument对象只能看到主页面文件的源代码相关信息
      

  3.   

    这种情况下不要用 webbrowser控件分析页面代码来实现自动登录,你可以用windows的消息机制实现,比如你可以给webbrower控件发送一个sendmessage消息,自动填写登录内容、模拟点击登录按钮就可以。
      

  4.   

    换一种思路:
    用HttpWebRequest去登录这个网站。
      

  5.   

    try http://code.google.com/p/autotester/
      

  6.   

    HttpWebRequest这个好!不过如果封包加密了就没香头了- -
      

  7.   

    如果说你实在无法获取到DOM元素,可以尝试直接使用HttpWebRequest发送请求,至于请求的封装格式你可以使用HTTP Sniffer查看本机网络上的HTTP包,只要实际在网页上登录一次,就可以找出HTTP封包格式了.
      

  8.   

    我觉得,你可以这样考虑。那JS里面的代码分析下。看他是怎么生成的。然后再用C#代码生成就是了。不也一样吗?JS肯定有他的生成规则撒。
      

  9.   

    看来只有用模拟才行,用httpwebrequest不行啊,网页是返回了,接着操作就不行了。