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); //执行其他操作}
C# Webbrowser 常用方法及多线程调用相关推荐
- python如何使用多线程_Python 类中的方法如何多线程调用?
这么写直接弹框报python运行出错,/尴尬,那这个怎么多线程调用getA/getB/getC/getD/getE呢?每次传参还要循环个arg2list列表 class ThreadTest(): d ...
- 多线程调用同一个对象的方法_多线程之如何创建和使用线程
一.创建线程和使用线程方式 1.1 继承Thread 让线程类继承自Thread类,然后重写run(),把需要多线程调用的代码放到run()中.但是需要开启线程的时候不能调用run方法,而是需要调用s ...
- 多线程调用生成主键流水号存储过程产生主键冲突问题解决方案
遇到开发多线程测试插入数据的时候发现主键冲突问题 问题具体描述如下: -------------------------------------------------------------- 调用 ...
- 多线程调用ch.ethz.ssh2.Connection执行shell任务时有的执行丢失情况解决
最近项目出现一个问题,在使用多线程调用开源ch.ethz.ssh2.Connection执行shell任务时有的任务没有执行,导致没有获取数据. 后来经过定位发现线程池同时间最大运行数设置的是15,而 ...
- 多线程调用系统COM组件的体会(CoInitialize)
多线程调用COM组件的体会(CoInitialize) 调用任何COM组件之前,你必须首先初始化COM套件环境,即调用CoInitialize或CoInitializeEx.COM套件环境在线程的生存 ...
- c++多线程调用python脚本
为什么? 1.提升效率. 2.一开始代码是在python中用了多进程,后面发现c++调用的Python代码是无法开启多进程的.由于Python解释器有全局解释所GIL的原因,导致在同一时刻只能有一个线 ...
- fb-caffe-exts:Facebook Caffe 推理多线程调用及内存优化
fb-caffe-exts 是 Facebook 在(主要)生产场景中使用 Caffe 时开发的扩展集合.predictor 是一个简单的 C++ 库,它封装了在共享权重的同时在多个线程中运行 caf ...
- QT多线程调用摄像头录屏软件开发
QT多线程调用摄像头录屏软件开发 文章目录 QT多线程调用摄像头录屏软件开发 前言 一.调用摄像头 二.UI界面设计 1.Button 2.鼠标选择矩形框录制 3.ffmpeg命令行压缩 总结 前言 ...
- 多线程调用同一个方法,局部变量会共享吗
对于一个局部变量应该是各线程独立的,一个线程不会改变另一个线程的临时变量. 多线程时, 几个线程间输出信息是交叉在一起的, 但你又没有区分是哪个线程输出的, 所以你自己就误认为是同一个线程输出的东西被 ...
最新文章
- Active Directory之Sysvol的修复、移动及重建
- ArcGIS工具备忘
- 写一个android图表框架1
- 虚幻4 控制台_鹅厂新手机游戏开测,虚幻4引擎开发战略游戏,能否超过率土之滨...
- C C++中关于全局变量静态变量,extern,static,const的区别与总结
- [Leedcode][JAVA][第287题][寻找重复数][HashSet][二分查找][快慢指针]
- 【英语学习】【加州教材】【G6】【科学】Earth Science目录及术语表
- 合并数字 — m个数字消除相邻的差的绝对值为1的两个数中较大的那一个,直到没有两个相邻的差的绝对值为 1 的数(动态数组定义)
- Linux中使用定时任务每周定时清理45天以前日志
- Atitit.js javascript异常处理机制与java异常的转换 多重catc hDWR 环境 .js exception process Vob7
- ROST情感分析的语法规则_用c语言手搓一个600行的类c语言解释器: 给编程初学者的解释器教程(4)- 语法分析1...
- 在Windows上安装FFmpeg程序
- 如何制作一个简单的APP应用软件?
- 注册表禁用计算机管理,解除封锁注册表被禁用的几种解决办法
- 二维码扫描枪对接手册
- 测试网页版淘宝购物车
- 语音识别(ASR)论文优选:挑战ASR规模极限Scaling ASR Improves Zero and Few Shot Learning
- 面试技巧之如何面试与如何应试
- 凸包Graham算法
- Unity-tweak-tool插件
热门文章
- OpenCV:使用OpenCV无缝克隆模块的实例(附完整代码)
- C语言flood fill 泛洪算法(附完整源码)
- OpenGL normalviewer普通视图的实例
- QT的QProgressDialog类的使用
- Hive集成Tez引擎跑任务出现的问题(Java heap space问题)
- Java导出数据到Excel
- 18_Android中Service的生命周期,远程服务,绑定远程服务,aidl服务调用,综合服务案例,编写一个应用程序调用远程支付宝远程服务场景
- 基于注解的Spring MVC(所需jar包,web.xml配置,Spring文件配置,@Controller,@RequestMapping,@RequestParam,model填参,EL取值)
- cxf和spring整合
- Struts2的Stack Context和ValueStack