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=.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)
{
;
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 常用方法及多线程调用的更多相关文章
- dump、libeay32.dll、gsoap、webserver多线程调用gsoap产生崩溃
问题:调用webserver接口出现dump文件,dump文件指向libeay32.dll有问题,产生崩溃的原因是gsoap多线程问题,多线程调用时需要程序启动的地方调用如下函数进行多线程初始化: i ...
- C# 多线程调用静态方法或者静态实例中的同一个方法-方法内部的变量是线程安全的
C# 多线程调用静态方法或者静态实例中的同一个方法-方法内部的变量是线程安全的 using System;using System.Threading;using System.Threading. ...
- C# winForm webBrowser页面中js调用winForm类方法(转)
有时我们在winform项目中嵌入了网页,想通过html页面调用后台方法,如何实现呢?其实很简单,主要有三部: 1.在被调用方法类上加上[ComVisible(true)]标签,意思就是当前类 ...
- 【转】 Pro Android学习笔记(七一):HTTP服务(5):多线程调用HttpClient
目录(?)[-] 应用共享HttpClient对象的同步问题 创建共享HttpClient代码 创建共享对象 创建可共享的HttpClient对象 使用共享HttpClient对象的代码 基础代码 修 ...
- 多线程调用有参数的方法---c# Thread 与 Task
C#实现多线程的方式:Task——任务 简介 .NET 4包含新名称空间System.Threading.Tasks,它 包含的类抽象出了线程功能. 在后台使用ThreadPool. 任务表示应完 ...
- Tess4j/Tess4j 多线程调用 过程中报错问题记录 Invalid memory access
最近使用 Tess4j 做一些 OCR图片文字识别的代码. 然后想当然的将这个 ITesseract ocr_robot = new Tesseract(); 作为了工具类做成了成员变量. 当多线程调 ...
- delphi中WEBBrowser网页html相互调用(一)
1.基本操作1.1.激活 var doc,url:Olevariant ; begin url:='about:blank' ;//或者一个有实际意义的url WebBrowser1.Navigate ...
- C# WebBrowser.DocumentCompleted 多次调用解决方法
大概出现了以下几种情况. 1.WebBrowser载入一个页面后DocumentCompleted事件会执行两次,但这两次的ReadyState状态不一样,分别是Intercative和Complet ...
- C# 使用委托实现多线程调用窗体的四种方式
1.方法一:使用线程 功能描述:在用c#做WinFrom开发的过程中.我们经常需要用到进度条(ProgressBar)用于显示进度信息.这时候我们可能就需要用到多线程,如果不采用多线程控制进度条,窗口 ...
随机推荐
- 利用XML FOR PATH 合并分组信息
-- ================================================ -- Description:合并分组内容 -- Author:夏保华 -- Date:2009 ...
- 设计模式 — 简单工厂模式(Simple Factory)
定义:定义一个工厂类,它可以根据参数的不同返回不同类型的实例,被创建的实例通常有公共的父类. 模式类型:创建型模型 Factory(工厂角色):即工厂类,负责实现创建所有产品实例的内部逻辑:工厂类可以 ...
- 记录一次bug解决过程:可维护性和性能优化
一.总结 使用某些变量的地方在2次以上的,强烈建议使用枚举值来维护变量,日后方便扩展. 查数据库的方法调用,能合并就净量去合并. 二.Bug描述 枚举变量的维护以及方法使用: public class ...
- Java编程里的类和对象
像我们搞计算机这块的,都知道这么一件事,当前的计算机编程语言主要分为两大块,一为面向过程,二为面向对象.Java就是一门纯面向对象的语言.学习了一个月左右的Java,在下对于Java当中的类和对象有了 ...
- Java之多态(一)
package test05; public class DuoTai_Test { /** * 一个对象,多种形态 * WQQ → Student.Worker.Friend 1).一个对象,多种形 ...
- java 正则匹配括号对以及其他成对出现的模式
最近,我们有个大调整,为了控制代码的质量,需要使用一些伪代码让业务人员编写应用逻辑(其实这么做完全是处于研发效能的考虑,95%以上的代码不需要特别注意都不会导致系统性风险,),然后通过工具自动生成实际 ...
- 【Google Chrome】 Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource问题解决
问题??打开Google Chrome浏览器报错如下: 结论 浏览器出于安全性考虑,默认对跨域访问禁止 解决方法 给浏览器添加启动参数 --allow-file-access-from-files ...
- Less配置环境
一.安装Sublime 插件 1.安装Less插件: ctrl+shift+p>install Package>输入less按Enter 2.安装Less2CSS插件:ctrl+shift ...
- SAP CRM 在Web UI中创建搜索帮助
多数情况下,在Web UI为一个特定的字段提供搜索帮助需要在事务SE11中创建搜索帮助. (注:也可以通过在SE24中创建一个类并实现实现IF_BSP_WD_CUSTOM_F4_CALLBACK接口来 ...
- React Native 之 View使用
前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会有所 ...