设置控件的值

///<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);     //执行其他操作}

C# Webbrowser 常用方法及多线程调用相关推荐

  1. python如何使用多线程_Python 类中的方法如何多线程调用?

    这么写直接弹框报python运行出错,/尴尬,那这个怎么多线程调用getA/getB/getC/getD/getE呢?每次传参还要循环个arg2list列表 class ThreadTest(): d ...

  2. 多线程调用同一个对象的方法_多线程之如何创建和使用线程

    一.创建线程和使用线程方式 1.1 继承Thread 让线程类继承自Thread类,然后重写run(),把需要多线程调用的代码放到run()中.但是需要开启线程的时候不能调用run方法,而是需要调用s ...

  3. 多线程调用生成主键流水号存储过程产生主键冲突问题解决方案

    遇到开发多线程测试插入数据的时候发现主键冲突问题 问题具体描述如下: -------------------------------------------------------------- 调用 ...

  4. 多线程调用ch.ethz.ssh2.Connection执行shell任务时有的执行丢失情况解决

    最近项目出现一个问题,在使用多线程调用开源ch.ethz.ssh2.Connection执行shell任务时有的任务没有执行,导致没有获取数据. 后来经过定位发现线程池同时间最大运行数设置的是15,而 ...

  5. 多线程调用系统COM组件的体会(CoInitialize)

    多线程调用COM组件的体会(CoInitialize) 调用任何COM组件之前,你必须首先初始化COM套件环境,即调用CoInitialize或CoInitializeEx.COM套件环境在线程的生存 ...

  6. c++多线程调用python脚本

    为什么? 1.提升效率. 2.一开始代码是在python中用了多进程,后面发现c++调用的Python代码是无法开启多进程的.由于Python解释器有全局解释所GIL的原因,导致在同一时刻只能有一个线 ...

  7. fb-caffe-exts:Facebook Caffe 推理多线程调用及内存优化

    fb-caffe-exts 是 Facebook 在(主要)生产场景中使用 Caffe 时开发的扩展集合.predictor 是一个简单的 C++ 库,它封装了在共享权重的同时在多个线程中运行 caf ...

  8. QT多线程调用摄像头录屏软件开发

    QT多线程调用摄像头录屏软件开发 文章目录 QT多线程调用摄像头录屏软件开发 前言 一.调用摄像头 二.UI界面设计 1.Button 2.鼠标选择矩形框录制 3.ffmpeg命令行压缩 总结 前言 ...

  9. 多线程调用同一个方法,局部变量会共享吗

    对于一个局部变量应该是各线程独立的,一个线程不会改变另一个线程的临时变量. 多线程时, 几个线程间输出信息是交叉在一起的, 但你又没有区分是哪个线程输出的, 所以你自己就误认为是同一个线程输出的东西被 ...

最新文章

  1. Active Directory之Sysvol的修复、移动及重建
  2. ArcGIS工具备忘
  3. 写一个android图表框架1
  4. 虚幻4 控制台_鹅厂新手机游戏开测,虚幻4引擎开发战略游戏,能否超过率土之滨...
  5. C C++中关于全局变量静态变量,extern,static,const的区别与总结
  6. [Leedcode][JAVA][第287题][寻找重复数][HashSet][二分查找][快慢指针]
  7. 【英语学习】【加州教材】【G6】【科学】Earth Science目录及术语表
  8. 合并数字 — m个数字消除相邻的差的绝对值为1的两个数中较大的那一个,直到没有两个相邻的差的绝对值为 1 的数(动态数组定义)
  9. Linux中使用定时任务每周定时清理45天以前日志
  10. Atitit.js javascript异常处理机制与java异常的转换 多重catc hDWR 环境 .js exception process Vob7
  11. ROST情感分析的语法规则_用c语言手搓一个600行的类c语言解释器: 给编程初学者的解释器教程(4)- 语法分析1...
  12. 在Windows上安装FFmpeg程序
  13. 如何制作一个简单的APP应用软件?
  14. 注册表禁用计算机管理,解除封锁注册表被禁用的几种解决办法
  15. 二维码扫描枪对接手册
  16. 测试网页版淘宝购物车
  17. 语音识别(ASR)论文优选:挑战ASR规模极限Scaling ASR Improves Zero and Few Shot Learning
  18. 面试技巧之如何面试与如何应试
  19. 凸包Graham算法
  20. Unity-tweak-tool插件

热门文章

  1. OpenCV:使用OpenCV无缝克隆模块的实例(附完整代码)
  2. C语言flood fill 泛洪算法(附完整源码)
  3. OpenGL normalviewer普通视图的实例
  4. QT的QProgressDialog类的使用
  5. Hive集成Tez引擎跑任务出现的问题(Java heap space问题)
  6. Java导出数据到Excel
  7. 18_Android中Service的生命周期,远程服务,绑定远程服务,aidl服务调用,综合服务案例,编写一个应用程序调用远程支付宝远程服务场景
  8. 基于注解的Spring MVC(所需jar包,web.xml配置,Spring文件配置,@Controller,@RequestMapping,@RequestParam,model填参,EL取值)
  9. cxf和spring整合
  10. Struts2的Stack Context和ValueStack