C#使用Webbrowser的一点心得体会

1、如何获得“打开网页出错”信息

 

DocumentCompleted事件中,判断Document.Url.AbsoluteUri中的"res://":标志即可(以前总用e.Url,怪不得总截取不到)

if (webBrowser1.Document.Url.AbsoluteUri.IndexOf("res://") > -1) //出错处理

{

webBrowser1.Navigate(e.Url);

return;

}

2、如何使用IHTMLDocument2MSHTML功能

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

posted @ 2009-07-10 17:36  小师傅  阅读(1794)  评论(1编辑  收藏  举报