使用Webbrowser的一点心得体会

原文:使用Webbrowser的一点心得体会

        自从用上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处理等问题,也不会在桌面上留下一堆窗口。

时间: 2024-09-10 12:33:31

使用Webbrowser的一点心得体会的相关文章

关于软件权限设置的一点心得体会

心得        本人在软件开发过程中关于用户权限处理的一点点心得体会,拿出来与大家共享,希望大家多提宝贵意见.        以往大多数文章资料设置用户权限都是通过ActionList与数据库中的权限表相联实现.我经过实践通过控件的Tag属性(每个控件都有一个保留的Tag属性,默认值为0),也可以实现权限的设置,下面我就具体说明实现方法.       1.将所有需要设置权限的菜单和按钮的Tag属性从1开始分配不重复的阿拉伯数字(1,2,3......),这里不用0(控件Tag属性的默认值),

如何查找技术资料----我的一点心得体会

作为一个IT人员,如果不能利用搜索引擎很快地查找到自己想要的技术资料的话,那么会很悲剧!特别是面对新技术的时候,由于资料特别少,就算有,大部分也是英文资料.如果这时候,你查找资料的能力比不上别人的话,很有可能就会在新一轮的技术竞赛中被甩在后面,比如现在很火的ios游戏开发.android由于搞的人多,资料也相对来说多一些,门槛也低一些,不需要mac,只要有一台pc就可以弄.但是,接下来的wphone7呢?你准备好了吗? 我来博客园也有将近半年时间了,在入园的时候,我写了一篇<如何学习iphone

选择域名的一点心得体会

域名对一个网站来说,也是很重要的.如果http://www.aliyun.com/zixun/aggregation/37858.html">域名选择的好,对网站的发展可以取得促进的作用.现在好的域名已经很少了.短的域名和有特定意义的域名已经屈指可数了.那我们选择域名到底要注意什么呢?当然这个问题很多老手都有很多的想法,在这里就不把选择域名要注意的方方面面一一阐述,我要讲的是我自己的一点体会和心得. 选择域名是如果可以尽量选择网站的中文拼音,这样对你的网站非常有好处.他既可以让网友一眼就可

使用Prototype的一点心得体会(六)

关于扩展: 1.扩展Array <html> <head> <script src="prototype-1.6.0.2.js" type="text/javascript"></script> <script>... var a = ['hello','world']; var b = ['wawa','anno']; var c = [a, b]; var d = [c , 'china'] alert

使用Prototype的一点心得体会(五)

1. 使用Class对象 <html> <head> <script src="prototype-1.6.0.2.js" type="text/javascript"></script> <script> var Person = Class.create(); Person.prototype = ...{ initialize: function(name) ...{ this.name = name

使用Prototype的一点心得体会(四)

使用Field对象操作表单域 ( API: http://www.prototypejs.org/api/form) 示例代码: <html> <head> <script src="prototype-1.6.0.2.js" type="text/javascript"></script> </head> <body> <input id="text1" type=&

使用Prototype的一点心得体会(三)

使用Enumerable类 ( API: http://www.prototypejs.org/api/enumerable) 1.collect方法 <html> <head> <script src="prototype-1.6.0.2.js" type="text/javascript"></script> <script>... var a = [20,30,40,50]; alert(a.coll

使用Prototype的一点心得体会(二)

使用Element对象 ( API: http://www.prototypejs.org/api/element ) 1.addClassName方法 <html> <head> <script src="prototype-1.6.0.2.js" type="text/javascript"></script> <script>... function chg() ...{ Element.addCla

使用Prototype的一点心得体会(一)

1.$() 如果页面中有2个id相同的HTML元素,函数将返回第一个元素. 对于IE6来说,该函数不仅可以获取id属性所对应的元素,还可获取name属性所对应的元 素. <html> <head> <script src="prototype-1.6.0.2.js" type="text/javascript"></script> <script language=JavaScript> function