C# 操作IE浏览器
最近的一个B/S系统中,用到了指模录入,当用户按了手指摸之后,要在IE浏览器的一个文本框上显示用户的姓名。由于要监控指模机的输入,因此客户端需要装一个.net控制台程序,通过此控制台程序监控指模机。这个没办法。这个.net控制台程序装在公司前台的电脑上就OK了。然后通过局域网与指模机相联,当用户按手指摸并且验证通过之后,从指模机读取用户的姓名,然后检测当前浏览器是否有打开系统上的某个页面。如果有,则将姓名输入到IE浏览器的响应文本框。
这里用到的最麻烦的一个东东就是C#操作IE浏览器。之前太孤陋寡闻,一开始的想法是控制台程序发送上远程服务器,然后页面AJAX轮询,但是耗用比较大的资源。下面主要通过com组件实现控制台程序操作IE。
1、首先,需要添加com组件的引用
- 加入对Microsoft Internet Controls的引用;
- 加入对Microsoft HTML Object Library的引用;(其实就是的mshtml)
2、打开一个新Tab并打开指定地址

//新建一个Tab,然后打开指定地址
SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindowsClass();
object objFlags = 1;
object objTargetFrameName = "";
object objPostData = "";
object objHeaders = "";
SHDocVw.InternetExplorer webBrowser1= (SHDocVw.InternetExplorer)shellWindows.Item(shellWindows.Count-1);
webBrowser1.Navigate("http://www.baidu.com", ref objFlags, ref objTargetFrameName, ref objPostData, ref objHeaders);

如果需要手动启动IE浏览器进程的话,可以使用:
Process.Start("iexplore.exe"); //直接打开IE浏览器(打开默认首页)
Process.Start("iexplore.exe","http://www.cnblogs.com/kissdodog"); //直接打开IE浏览器,打开指定页
3、操作js
下面,通过操作js实现如下效果:往百度搜索框里面输入"刘德华"并点击搜索。

//遍历所有选项卡
foreach (SHDocVw.InternetExplorer Browser in shellWindows)
{
if (Browser.LocationURL.Contains("www.baidu.com"))
{
//通过操作js点击按钮
if (Browser.Document is HTMLDocumentClass)
{
HTMLDocumentClass doc2 = Browser.Document as HTMLDocumentClass;
HTMLScriptElement script = (HTMLScriptElement)doc2.createElement("script");
//script.text = "alert(123);";
//恰好百度用了jQuery
script.text = "$(\"#kw1\").val('刘德华'); $(\"#su1\").click();";
HTMLBodyClass body = doc2.body as HTMLBodyClass;
body.appendChild((IHTMLDOMNode)script);
}
}
}

4、C#直接通过DOM操作IE
C#直接通过Dom操作IE

SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindowsClass();
//遍历所有选项卡
foreach (SHDocVw.InternetExplorer Browser in shellWindows)
{
if (Browser.LocationURL.Contains("www.baidu.com"))
{
mshtml.IHTMLDocument2 doc2 = (mshtml.IHTMLDocument2)Browser.Document;
mshtml.IHTMLElementCollection inputs = (mshtml.IHTMLElementCollection)doc2.all.tags("INPUT");
mshtml.HTMLInputElement input1 = (mshtml.HTMLInputElement)inputs.item("kw1", 0);
input1.value = "刘德华";
mshtml.IHTMLElement element2 = (mshtml.IHTMLElement)inputs.item("su1", 0);
element2.click();
}
}

5、在里面操作IFrame
操作IFrame是一个比较麻烦的操作,很多方式都不能实现,目前唯一的办法是通过在页面上执行一段js实现操作IFrame(希望有人能告诉我)。
C# 操作IE浏览器的更多相关文章
- atitit.浏览器web gui操作类库 和 操作chrome浏览器的类库使用总结
atitit.浏览器web gui操作类库 和 操作chrome浏览器的类库使用总结 1. 常见标准 1 1.1. 录制重放 1 1.2. 一个窗体一个proxy cookie 1 1.3. exec ...
- splinter操作ie浏览器
splinter 是在selenium上的封装,很多操作更方便,但是默认似乎不能直接操作ie,通过修改browser.py文件,splinter\driver\webdriver下增加ie.py文件, ...
- Windows对象操作:浏览器窗口信息
属性(值或者子对象):opener:打开当前窗口的源窗口,如果当前窗口是首次启动浏览器打开的,则opener是null,可以利用这个属性来关闭源窗口. 属性:Windows.shuxing; 方法(函 ...
- Python脚本控制的WebDriver 常用操作 <七>浏览器前进和后退操作
下面将使用WebDriver来控制浏览器的前进和后退操作 测试用例场景 此操作和get.url()方法功能相同 Python脚本 # coding=gbk ''' Created on 2013年12 ...
- Python脚本控制的WebDriver 常用操作 <三> 浏览器最大化
下面将模拟执行一个控制浏览器最大化的操作 测试用例场景 当我们在测试中使用一些基于图像和坐标的辅助测试工具时,我们就会需要使浏览器在每次测试时保存最大化,以便在同一分辨率下进行图像比对和坐标点选. 举 ...
- 一个简单的样例看明确怎样利用window.location.hash实现ajax操作时浏览器的前进/后退功能
我们知道JavaScript中非常早就提供了window.history对象,利用history对象的forward().go().back()方法可以方便实现不同页面之间的前进.后退等这样的导航功能 ...
- qutebrowser 只用键盘操作的浏览器
一个 Qt 库制作的最简化浏览器,内核是 Chromium.最大特点就是它自带命令行,可以完全用键盘操作. 下载地址: 链接:https://share.weiyun.com/5Y2Ajvn 密码:m ...
- C#通过COM组件操作IE浏览器(四):实用代码总结
//执行js方法 IHTMLWindow2 win = oDocument2.parentWindow; win.execScript("functiona();", " ...
- C#通过COM组件操作IE浏览器(一):打开浏览器跳转到指定网站
简介Internet Explorer对象模型 1.属性 属性 类型 描述 Application Object 返回对Internet Explorer对象的引用. Busy Boolean 返回一 ...
随机推荐
- C语音--static变量
static变量大概是两种情况 在函数里的static变量意味着这个变量的生存期是全局的,你可以想象它实际上就是在函数外声明的, 当然因为可见范围的原因其他函数不能访问它 在函数外的static变量意 ...
- InnoSetup XML操作函数
用于InnoSetup 5 以上.对XML文件的操作,简化InnoSetup XML访问过程. 1. [代码]InnoSetup 5 脚本 { ======================== ...
- web字体格式及几种在线格式转换工具介绍
原文地址:http://blog.csdn.net/xiaolongtotop/article/details/8316554 目前,文字信息仍是网站最主要的内容,随着CSS3技术的不断成熟,Web字 ...
- Encode and Decode Strings 解答
Question Design an algorithm to encode a list of strings to a string. The encoded string is then sen ...
- MySQL的备份和还原
MySQL的备份和还原 备份:副本 RAID1,RAID10:保证硬件损坏而不会业务中止: DROP TABLE mydb.tb1; 备份类型: 热备份.温备份和冷备 ...
- Hibernate自定义主键
Hibernate自定义主键,通过此方法可以解决一此特殊的主键ID,在了解自定义主键时,先了解下Hibernate有自带的10种生成主键方法. 1) assigned主键由外部程序负责生成,无需Hib ...
- nonatomic,assign,copy,retain的区别
nonatomic:非原子性访问,不加同步,多线程并发访问会提高性能.如果不加此属性,则默认是两个访问方法都为原子型事务访问. (atomic是Objc使用的一种 ...
- Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6786239 Android 系统的运行时库层代 ...
- .net对象转Datable
public static DataTable GetDataTable<T>( IEnumerable<T> list,string tableName) { DataTab ...
- varchar和Nvarchar的区别
(1)varchar(N) 存储时 N的单位是字节 比如说varchar(2) 代表的是 该字段可以存储字节长度为2的数据 例子:可以添加 张 或者 ab 添加成功! 但添加的时候如果是: ...