最近学校的破网越来越不像话了,换了这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

转载于:https://www.cnblogs.com/lekko/archive/2012/09/01/2665653.html

掩耳盗铃之使用WebBrowser封装网页相关推荐

  1. 用webBrowser打开网页出现脚本错误怎么办

    当IE浏览器遇到脚本错误时,在浏览器左下角会出现一个黄色图标,点击可以查看脚本错误的详细信息,并不会有弹出的错误信息框.我们在用webBrowser编写的程序打开网页,遇到脚本有问题是,会弹出一个错误 ...

  2. C# 网络编程之webBrowser获取网页url和下载网页中图片

    该文章主要是通过C#网络编程的webBrowser获取网页中的url并简单的尝试下载网页中的图片,主要是为以后网络开发的基础学习.其中主要的通过应用程序结合网页知识.正则表达式实现浏览.获取url.下 ...

  3. GHOSTXPSP3系统封装网页图文教程

    自己编写的XP系统封装网页图文教程,希望对想学习系统封装的网友有所帮助!~ 下载地址 转载于:https://blog.51cto.com/haiyang457/1149298

  4. 用webbrowser打开网页

    用webbrowser打开网页 话不多说,直接上代码! import webbrowser url = 'http:www.icourse163.org' webbrowser.open(url)

  5. C# webbrowser 获取网页元素 示例代码

    在应用webbrowser对网页进行自动化操作时,不能有效地获取网页元素,往往是后续编程的拦路虎,原因是webbrowser提供的GetElementById().GetElementFromPoin ...

  6. WPF使用Webbrowser操作网页的主要代码

    1,引用mshtml.dllusingmshtml;2,获取元素属性值IHTMLDocument2 doc2=(IHTMLDocument2)webbrowser1.Document; IHTMLEl ...

  7. C# WebBrowser实现网页自动填表

    曾今向网友介绍过我的一个自己编写的自动填写网页表单的小程序,很多网友都觉得很实用,也许多会对这个程序的源码很感兴趣,这里我只是简介下程序中用到的主要代码.最初我是通过下面这篇文章渐渐积累的相关知识,再 ...

  8. C#使用 WebBrowser制作网页游戏辅助工具关键技术分析

    使用WebBrowser控件,实现起来确实很方便,但灵活性差,比不上直接组包发包.对三国风云这款网页游戏来 说,WebBrowser用的好的话理论上可以实现想要的功能(我只实现了整点自动"举 ...

  9. 网站转APP软件封装网页转APP打包H5封装分发平台APP封装生成双端

    APP封装 什么是 APP 封装? 什么是APP打包 其实APP打包.APP封装.在线打包 都是一个意思,就是把网站封装成APP 1.APP 封装是指把网页形式的网站通过技术封装成为可以下载 到手机上 ...

最新文章

  1. mysql题目(二学年)
  2. OneAPM挂牌新三板,续写ITOM新篇章
  3. SpringMVC教程--json使用详解
  4. php au著h权限管理,Jirafeau:一个简洁的临时文件分享系统,可随时删除
  5. python数据库在哪_python可以用哪些数据库
  6. Dash的快速入门将使您在5分钟内进入“ Hello World”
  7. php4和php5的区别,什么是PHP 4和PHP 5之间的区别是什么-php是什么文件
  8. matlab 引号内变量,MATLAB 7.0 单引号内变量现实问题!
  9. 防火墙虚拟系统资源分配配置实例
  10. 系统时间正常日志时间不正常
  11. 活动选择问题(贪心)
  12. android javacv,【首发】AndroidStudio配置JavaCV环境
  13. jQuery easyUI设置表格中的背景色
  14. UI交互设计教程全套视频合集:轻松玩转photoshop抠图
  15. 大力呼吁国内Fil厂商利用IPFS技术赋能实体经济,实现数据安全存储,已十分重要且紧迫了
  16. 了解汽车贷款全过程,不要掉进车贷“坑”!
  17. 服务器拷文件突然自动关机,windows server 2008R2自动关机解决方法
  18. JAVA移位运算符-左移、右移、无符号右移 (简解)
  19. 圆形头像 android,android 一个简单的实现圆形头像的Demo
  20. 10天学会ASP打包下载

热门文章

  1. RxJava 2.x 使用最佳实践
  2. 功能奇数次执行和偶数次执行时的结果不同的故障复盘
  3. Visual Entity 教程(一)从数据库创建模型
  4. windows 2003 r2 cdkey
  5. C++ 之虚函数的实现原理
  6. 程序员只拿到5千工资吐槽无法生活,网友:别在意薪资
  7. Python基础第六天——函数的使用、函数的参数、函数的返回值、函数的嵌套、命名空间、作用域、函数对象...
  8. 2014522420145238《信息安全设计基础》实验二
  9. crontab 案例
  10. Eclipse,myeclipse开发中常用技巧总结