博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Webbrowser的一点心得体会
阅读量:7156 次
发布时间:2019-06-29

本文共 1618 字,大约阅读时间需要 5 分钟。

原文:

        自从用上VS2005后,发现多了个WebBrowser控件(.net 2003中不带),为图方便吧,有好多小工具就用这个写的,慢慢也有点体会了,总结一下,与网友们共享吧。

        1、如何获得“打开网页出错”信息
        在DocumentCompleted事件中,判断Document.Url.AbsoluteUri中的"res://":标志即可(以前总用e.Url,怪不得总截取不到)
            if (webBrowser1.Document.Url.AbsoluteUri.IndexOf("res://") > -1)      //出错处理
            {
                   webBrowser1.Navigate(e.Url);
                   return;
            }
        2、如何使用IHTMLDocument2等MSHTML功能
        VS2005中没有完全封装MSHTML中的功能,留了个DomDocument接口。直接引用Microsoft HTML Object Library类库后,就可以操作IHTMLDocument2等复杂的功能了。                如:IHTMLDocument2 doc2 = (IHTMLDocument2)webBrowser1.Document.DomDocument;
        3、如何提取网页中的图片,尤其是验证码图等以流方式返回的图片
        很多网站一些图片是动态生成了,是从服务器以流方式一点点发过来再组装成图片的。不管是以什么方式,到了客户端,都是完整的。用WebBrowser的好处就在这里,只要管住最终结果就OK了。以下是得到网页上验证码的代码:

               /// <summary>

        /// 返回指定WebBrowser中图片<IMG></IMG>中的图内容
        /// </summary>
        /// <param name="WebCtl">WebBrowser控件</param>
        /// <param name="ImgeTag">IMG元素</param>
        /// <returns>IMG对象</returns>
       private Image GetWebImage(WebBrowser WebCtl, HtmlElement ImgeTag)
        {
            HTMLDocument doc = (HTMLDocument)WebCtl.Document.DomDocument;
            HTMLBody body = (HTMLBody)doc.body;
            IHTMLControlRange rang = (IHTMLControlRange)body.createControlRange();
            IHTMLControlElement Img = (IHTMLControlElement)ImgeTag.DomElement; //图片地址

            Image oldImage = Clipboard.GetImage();

            rang.add(Img);
            rang.execCommand("Copy", false, null);  //拷贝到内存
            Image numImage = Clipboard.GetImage();  //从 Clipboard中取图
             Clipboard.SetImage(oldImage);     //还原
            return numImage;
        }

        
4、如何屏蔽掉Alert()类型的弹出窗口
        首先申明这不是技术,只是一种处理的技巧。网上查了很多资料,对于网页中弹出Alert()窗口不好屏蔽(尤其是Writer出来的)。我的方法是做两个EXE,一个为主程序.exe,一个Run.exe。WebBrowser控件放在RUN.exe中,在主程序中通过Process调用RUN.exe,而用在执行完任务后,将RUN.exe杀掉(Kill),这时Alert窗口会自动关闭。我用这种技巧做了好了个投票机,可以安静的运行,还能回避Session处理等问题,也不会在桌面上留下一堆窗口。

转载地址:http://dehgl.baihongyu.com/

你可能感兴趣的文章
百度测试开发岗位面试题目
查看>>
Spring Cloud(四)服务提供者 Eureka + 服务消费者 Feign
查看>>
Spring-Data-Jpa的使用
查看>>
CentOS7安装软件报错:Cannot allocate memory
查看>>
HttpClient上传文件到微信素材乱码问题解决
查看>>
主动模式和被动模式
查看>>
分类、回归
查看>>
Dubbo源码阅读笔记(一)
查看>>
List跟踪源码个人记录
查看>>
企业级 SpringCloud 教程 (七)高可用的分布式配置中心(Spring Cloud Config)
查看>>
区块链最全书单|深聊了50个微信群,学习区块链必读这20本书
查看>>
20个热门在线少儿编程网站【2019】
查看>>
Netty 即时通信 后端 (五)
查看>>
没有内涵段子可以刷了,利用Python爬取段友之家贴吧图片和小视频(含源码)
查看>>
打造极致性能数据库中间件丨LVS+Keepalive+华为云DDM之理论篇
查看>>
分布式微服务云架构开发Web应用
查看>>
架构的代码结构
查看>>
MaxCompute推出面向开发者的专属版本,普惠大数据开发者
查看>>
MySQL 在高并发下的 订单撮合 系统使用 共享锁 与 排他锁 保证数据一致性
查看>>
JavaScript数据类型检测总结
查看>>