700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > C# Webbrowser 常用方法及多线程调用

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

时间:2024-01-08 04:53:14

相关推荐

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

设置控件的值

///<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);

//执行其他操作

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。