|
自從用上VS2005后,發(fā)現(xiàn)多了個WebBrowser控件(.net 2003中不帶),為圖方便吧,有好多小工具就用這個寫的,慢慢也有點(diǎn)體會了,總結(jié)一下,與網(wǎng)友們共享吧。 1、如何獲得“打開網(wǎng)頁出錯”信息 在DocumentCompleted事件中,判斷Document.Url.AbsoluteUri中的"res://":標(biāo)志即可(以前總用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等復(fù)雜的功能了。 如:IHTMLDocument2
doc2 = (IHTMLDocument2)webBrowser1.Document.DomDocument; 3、如何提取網(wǎng)頁中的圖片,尤其是驗證碼圖等以流方式返回的圖片 很多網(wǎng)站一些圖片是動態(tài)生成了,是從服務(wù)器以流方式一點(diǎn)點(diǎn)發(fā)過來再組裝成圖片的。不管是以什么方式,到了客戶端,都是完整的。用WebBrowser的好處就在這里,只要管住最終結(jié)果就OK了。以下是得到網(wǎng)頁上驗證碼的代碼:
|
/// <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出來的)。我的方法是做兩個
EXE,一個為主程序.exe,一個Run.exe。WebBrowser控件放在RUN.exe中,在主程序中通過Process調(diào)用RUN.exe,
而用在執(zhí)行完任務(wù)后,將RUN.exe殺掉(Kill),這時Alert窗口會自動關(guān)閉。我用這種技巧做了好了個投票機(jī),可以安靜的運(yùn)行,還能回避
Session處理等問題,也不會在桌面上留下一堆窗口。
|