zoukankan      html  css  js  c++  java
  • 掩耳盗铃之使用WebBrowser封装网页

      最近学校的破网越来越不像话了,换了这Win7机器后,Dr.Com就一直掉,换了各种版本,也不行,无奈,我只得换成了网页登录模式。但是这上网还要开个网页不能关,无形中增加了我对电脑整洁度的恶评,所以,我决定封装这个丑陋的界面:

      使用WebBrowser控件用来加载这个页面,且设置Visibility="Hidden" 让它不显示,就行了。

    WB_Client.Source = new Uri("http://"+"192.168.20.1"); 

      上面便是加载页面的方法,WB_Client是控件名,192.168.20.1是学校服务器的IP。

      接下来便是提取页面中的元素了:用户名框、密码框、确认按钮、注销按钮,需要用到Microsoft.mshtml.dll,它在C:\Program Files\Microsoft.NET\Primary Interop Assemblies下。添加引用后:  

    _htmlDoc = WB_Client.Document as mshtml.IHTMLDocument2;

      便能取到页面的Document了,然后使用Chrome或者Firefox在浏览器上分别获取这些控件的标识,如id、name等,在后台通过DOM获取这些控件:

    mshtml.IHTMLElement element = _htmlDoc.all.item("DDDDD");

      其中DDDDD就是控件的id或者name属性值,得到的element有三个必用的方法:getAttribute、setAttribute、click。不用多说了吧,可以通过前两个方法,把页面中的值给你的WPF前台中对应的TextBox,或者从前台传到页面。通过click方法可以触发页面中的登录按钮,当单击前台中的“假”Button时,在后台使用这个方法模拟登录。

      如果说这个控件没有id、name怎么办,例如我这登录后的注销按钮是没有名字的,那怎么弄呢?

      使用笨办法吧,遍历,然后对字:

     1 mshtml.IHTMLElement element;
     2 mshtml.IHTMLElementCollection elements = _htmlDoc.all.tags("input");
     3 foreach (mshtml.IHTMLElement elm in elements)
     4 {
     5     if (elm.getAttribute("value") != "注销")
     6     {
     7         element = elm;
     8         break;
     9     }
    10 }

      好,基础已经有了,那么怎么实现登录状态、数据保存本地呢?WebBrowser有两个非常重要的事件可以帮助解决这些问题:Navigating、LoadCompleted。

      Navigating是在页面开始跳转前触发的,这时我做一个判断,如果能在页面中找到“登录”按钮,就认为这时用户要登录了,便把获取的用户名、密码保存到XML文件中,当然,密码是加密保存的,取出时再解密。

      LoadCompleted是页面跳转后触发的,而且此时WebBrowser的Document已经更新了,如果是用Navigated我发现将发现Document里什么HTML元素也没有。在这个方法中,需要完成的任务包括验证网页的登录状态,设置WPF界面的显示元素等。

      至于其它的功能:是否自动登录、界面自动最少化、自动保存密码、程序托盘图标等,都比较容易实现,来看一下封装后的东西吧:

       虽然也不是很好看,但是通过使用托盘图标类NotifyIcon,我已经可以把这个页面给单独放起来了,也不会因为关闭浏览器而误关了登录会话,够用了。

      转载请注明原址:http://www.cnblogs.com/lekko/archive/2012/08/31/2665653.html 

  • 相关阅读:
    [一起面试AI]NO.9 如何判断函数凸或非凸
    [一起面试AI]NO.8 在机器学习中,常用的损失函数有哪些?
    [一起面试AI]NO.5过拟合、欠拟合与正则化是什么?
    [一起面试AI]NO.4特征工程主要包括什么?
    [一起面试AI]NO.3分类问题常用的性能度量指标有哪些
    MySQL中自增ID修改起始值
    折半查找算法(Python版)
    彻底解决安卓7.0及以上版本抓包https失败
    Charles抓包2-Charles抓取https请求
    Charles抓包1-Charles安装汉化(附正版注册码)
  • 原文地址:https://www.cnblogs.com/lekko/p/2665653.html
Copyright © 2011-2022 走看看