• 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);
    //执行其他操作
  • 相关阅读:
    双camera景深计算
    解决单反出片发灰难题 教你让照片变得通透
    增强画面纵深感的几个小技巧
    双目视觉算法简介
    Android系统源代码的下载与编译
    android 7.0 (nougat)的编译优化-ninja
    神奇的图像处理算法
    【老戴说镜头】浅谈双摄镜头技术
    [Android编程心得] Camera(OpenCV)自动对焦和触摸对焦的实现
    关于DLL模块导出函数
  • 原文地址:https://www.cnblogs.com/wangyinlon/p/10906837.html
Copyright © 2020-2023  润新知