C# Webbrowser 常用方法及多线程调用

来源:互联网 发布:win10usb端口添加失败 编辑:程序博客网 时间:2024/05/21 07:14
设置控件的值

        /// <summary>        /// 根据ID,NAME双重判断并设置值        /// </summary>        /// <param name="tagName"></param>        /// <param name="id"></param>        /// <param name="value"></param>        private void SetTxt(string tagName, string name, string id, string value)        {            HtmlDocument docx = <strong><font color="#FF0000">webBrowser</font></strong>1.Document;            foreach (HtmlElement item in docx.GetElementsByTagName(tagName))            {                 if (item.GetAttribute("name") != null && item.GetAttribute("name") == name || item.Id == id)                {                    try                    {                        item.Focus();                        item.SetAttribute("value", value);                    }                    catch                    {                        item.SetAttribute("value", value);                    }                 }            }        }

返回指定WebBrowser中图片<IMG></IMG>中的图内容   需要引用MsHtml

 

/// <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();    try    {        Clipboard.SetImage(oldImage);    }    catch { }    return numImage;}

 

一个通用webbrowser类,封装常用方法

 

 

public partial class htmlElement    {        //根据Name获取元素        public HtmlElement GetElement_Name(WebBrowser wb, string Name)        {            HtmlElement e = wb.Document.All[Name];            return e;        }         //根据Id获取元素        public HtmlElement GetElement_Id(WebBrowser wb, string id)        {            HtmlElement e = wb.Document.GetElementById(id);            return e;        }         //根据Index获取元素        public HtmlElement GetElement_Index(WebBrowser wb, int index)        {            HtmlElement e = wb.Document.All[index];            return e;        }         // 据Type获取元 ,在没有NAME和ID的情况下使用        public HtmlElement GetElement_Type(WebBrowser wb, string type)        {            HtmlElement e = null;            HtmlElementCollection elements = wb.Document.GetElementsByTagName("input");            foreach (HtmlElement element in elements)            {                if (element.GetAttribute("type") == type)                {                    e = element;                }            }            return e;        }        // 据Type获取元 ,在没有NAME和ID的情况下使用,并指定是同类type的第 个,GetElement_Type()升级版        public HtmlElement GetElement_Type_No(WebBrowser wb, string type, int i)        {            int j = 1;            HtmlElement e = null;            HtmlElementCollection elements = wb.Document.GetElementsByTagName("input");            foreach (HtmlElement element in elements)            {                if (element.GetAttribute("type") == type)                {                    if (j == i)                    {                        e = element;                    }                    j++;                }            }            return e;        }        //获取form表单名name,返回表单        public HtmlElement GetElement_Form(WebBrowser wb, string form_name)        {            HtmlElement e = wb.Document.Forms[form_name];            return e;        }          //设置元素value属性的值        public void Write_value(HtmlElement e, string value)        {            e.SetAttribute("value", value);        }         //执行元素的方法,如:click,submit(需Form表单名)等        public void Btn_click(HtmlElement e, string s)        {             e.InvokeMember(s);        }    }

 

多线程执行webbrowser的方法:
webbrowser 只支持STA模式

 

private void ThreadWebBrowser(string url){   Thread tread = new Thread(new ParameterizedThreadStart(BeginCatch));   tread.SetApartmentState(ApartmentState.STA);//注意创建的线程单元   tread.Start(url);} private void BeginCatch(object obj){     string url = obj.ToString();     WebBrowser wb = new WebBrowser();     wb.ScriptErrorsSuppressed = true;     //在这里Navigate一个空白页面 必须     wb.Navigate("about:blank");     string htmlcode = "";//这里赋值 HTML字符串数据     wb.Document.Write(htmlcode);     //执行其他操作

 

0 0