|         自從用上VS2005后,發(fā)現(xiàn)多了個(gè)WebBrowser控件(.net 2003中不帶),為圖方便吧,有好多小工具就用這個(gè)寫的,慢慢也有點(diǎn)體會(huì)了,總結(jié)一下,與網(wǎng)友們共享吧。1、如何獲得“打開網(wǎng)頁出錯(cuò)”信息
 在DocumentCompleted事件中,判斷Document.Url.AbsoluteUri中的"res://":標(biāo)志即可(以前總用e.Url,怪不得總截取不到)
 if (webBrowser1.Document.Url.AbsoluteUri.IndexOf("res://") > -1)      //出錯(cuò)處理
 {
 webBrowser1.Navigate(e.Url);
 return;
 }
 2、如何使用IHTMLDocument2等MSHTML功能
 VS2005
中沒有完全封裝MSHTML中的功能,留了個(gè)DomDocument接口。直接引用Microsoft HTML Object
Library類庫后,就可以操作IHTMLDocument2等復(fù)雜的功能了。                如:IHTMLDocument2
doc2 = (IHTMLDocument2)webBrowser1.Document.DomDocument;
 3、如何提取網(wǎng)頁中的圖片,尤其是驗(yàn)證碼圖等以流方式返回的圖片
 很多網(wǎng)站一些圖片是動(dòng)態(tài)生成了,是從服務(wù)器以流方式一點(diǎn)點(diǎn)發(fā)過來再組裝成圖片的。不管是以什么方式,到了客戶端,都是完整的。用WebBrowser的好處就在這里,只要管住最終結(jié)果就OK了。以下是得到網(wǎng)頁上驗(yàn)證碼的代碼:
 
 
    
        
            |                /// <summary>/// 返回指定WebBrowser中圖片<IMG></IMG>中的圖內(nèi)容
 /// </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);  //拷貝到內(nèi)存
 Image numImage = Clipboard.GetImage();  //從 Clipboard中取圖
 Clipboard.SetImage(oldImage);     //還原
 return numImage;
 }
 |  4、如何屏蔽掉Alert()類型的彈出窗口
 首
先申明這不是技術(shù),只是一種處理的技巧。網(wǎng)上查了很多資料,對于網(wǎng)頁中彈出Alert()窗口不好屏蔽(尤其是Writer出來的)。我的方法是做兩個(gè)
EXE,一個(gè)為主程序.exe,一個(gè)Run.exe。WebBrowser控件放在RUN.exe中,在主程序中通過Process調(diào)用RUN.exe,
而用在執(zhí)行完任務(wù)后,將RUN.exe殺掉(Kill),這時(shí)Alert窗口會(huì)自動(dòng)關(guān)閉。我用這種技巧做了好了個(gè)投票機(jī),可以安靜的運(yùn)行,還能回避
Session處理等問題,也不會(huì)在桌面上留下一堆窗口。
 |