最近的一个B/S系统中,用到了指模录入,当用户按了手指摸之后,要在IE浏览器的一个文本框上显示用户的姓名。由于要监控指模机的输入,因此客户端需要装一个.net控制台程序,通过此控制台程序监控指模机。这个没办法。这个.net控制台程序装在公司前台的电脑上就OK了。然后通过局域网与指模机相联,当用户按手指摸并且验证通过之后,从指模机读取用户的姓名,然后检测当前浏览器是否有打开系统上的某个页面。如果有,则将姓名输入到IE浏览器的响应文本框。
这里用到的最麻烦的一个东东就是C#操作IE浏览器。之前太孤陋寡闻,一开始的想法是控制台程序发送上远程服务器,然后页面AJAX轮询,但是耗用比较大的资源。下面主要通过com组件实现控制台程序操作IE。
1、首先,需要添加com组件的引用
- 加入对Microsoft Internet Controls的引用;
- 加入对Microsoft HTML Object Library的引用;(其实就是的mshtml)
2、打开一个新Tab并打开指定地址
![C# 操作IE浏览器 C# 操作IE浏览器](https://image.shishitao.com:8440/aHR0cDovL2Jic21heC5pa2FmYW4uY29tL3N0YXRpYy9MM0J5YjNoNUwyaDBkSEJ6TDJOdmJXMXZiaTVqYm1Kc2IyZHpMbU52YlM5cGJXRm5aWE12WTI5d2VXTnZaR1V1WjJsbS5qcGc%3D.jpg?w=700&webp=1)
//新建一个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);
![C# 操作IE浏览器 C# 操作IE浏览器](https://image.shishitao.com:8440/aHR0cDovL2Jic21heC5pa2FmYW4uY29tL3N0YXRpYy9MM0J5YjNoNUwyaDBkSEJ6TDJOdmJXMXZiaTVqYm1Kc2IyZHpMbU52YlM5cGJXRm5aWE12WTI5d2VXTnZaR1V1WjJsbS5qcGc%3D.jpg?w=700&webp=1)
如果需要手动启动IE浏览器进程的话,可以使用:
Process.Start("iexplore.exe"); //直接打开IE浏览器(打开默认首页)
Process.Start("iexplore.exe","http://www.cnblogs.com/kissdodog"); //直接打开IE浏览器,打开指定页
3、操作js
下面,通过操作js实现如下效果:往百度搜索框里面输入"刘德华"并点击搜索。
![C# 操作IE浏览器 C# 操作IE浏览器](https://image.shishitao.com:8440/aHR0cDovL2Jic21heC5pa2FmYW4uY29tL3N0YXRpYy9MM0J5YjNoNUwyaDBkSEJ6TDJOdmJXMXZiaTVqYm1Kc2IyZHpMbU52YlM5cGJXRm5aWE12WTI5d2VXTnZaR1V1WjJsbS5qcGc%3D.jpg?w=700&webp=1)
//遍历所有选项卡
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);
}
}
}
![C# 操作IE浏览器 C# 操作IE浏览器](https://image.shishitao.com:8440/aHR0cDovL2Jic21heC5pa2FmYW4uY29tL3N0YXRpYy9MM0J5YjNoNUwyaDBkSEJ6TDJOdmJXMXZiaTVqYm1Kc2IyZHpMbU52YlM5cGJXRm5aWE12WTI5d2VXTnZaR1V1WjJsbS5qcGc%3D.jpg?w=700&webp=1)
4、C#直接通过DOM操作IE
C#直接通过Dom操作IE
![C# 操作IE浏览器 C# 操作IE浏览器](https://image.shishitao.com:8440/aHR0cDovL2Jic21heC5pa2FmYW4uY29tL3N0YXRpYy9MM0J5YjNoNUwyaDBkSEJ6TDJOdmJXMXZiaTVqYm1Kc2IyZHpMbU52YlM5cGJXRm5aWE12WTI5d2VXTnZaR1V1WjJsbS5qcGc%3D.jpg?w=700&webp=1)
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();
}
}
![C# 操作IE浏览器 C# 操作IE浏览器](https://image.shishitao.com:8440/aHR0cDovL2Jic21heC5pa2FmYW4uY29tL3N0YXRpYy9MM0J5YjNoNUwyaDBkSEJ6TDJOdmJXMXZiaTVqYm1Kc2IyZHpMbU52YlM5cGJXRm5aWE12WTI5d2VXTnZaR1V1WjJsbS5qcGc%3D.jpg?w=700&webp=1)
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 返回一 ...
随机推荐
-
设计模式(十二):bridge模式
刚开始看到这个模式并不是很理解,之后在网上看到别人的博客,才大致抓住了脉络. 何谓抽象和实现分离:就是将一个实际的物件跟它的所具有的功能分离.<大话设计模式>中有对手机品牌和具体的手机应用 ...
-
扩展JQuery和JS的方法
//JS的扩展方法: 1 定义类静态方法扩展 2 定义类对象方法扩展 var aClass = function(){} //1 定义这个类的静态方法 aC ...
-
python标准库00 学习准备
Python标准库----走马观花 python有一套很有用的标准库.标准库会随着python解释器一起安装在你的电脑上的.它是python的一个组成部分.这些标准库是python为你准备的利器,可以 ...
-
Visual Studio动态代码生成的实现基础
这篇文章讨论以下3个问题: 1.代码生成器应该做什么 2.大多数代码生成器的缺点 3.动态代码生成实现的基础 代码生成器应该做什么? 我认为,目标是加快项目开发,方式是减少重复代码手工操作,实现是用过 ...
-
LightOJ 1214 Large Division 水题
java有大数模板 import java.util.Scanner; import java.math.*; public class Main { public static void main( ...
-
Mac电脑手动清理
Xcode的无用的文件如图找到DerivedData文件夹,删除里面文件就可以了(先找到隐藏的文件)
-
在egret中使用protobuf
原文章删除,重新使用MarkDown排版 在H5游戏领域,对于服务端与客户端的通信协议有一个选择,那就是使用protobuf.js.对于那些直接使用JavaScript开发的引擎而言,protobuf ...
-
七、VueJs 填坑日记之渲染一个列表
在上一篇博文中,我们对vue组件有了一个简单的认识和大概的理解.在之前认识项目结构的时候,我们在/src目录中创建了一个components的文件夹,而今天就要用到了,这个文件夹的作用就是放置我们的自 ...
-
asp.net使用session完成: 从哪个页面进入登录页面,登录成功还回到那个页面
1.在Login.aspx页面Load中加入 if (!IsPostBack && Request.UrlReferrer != null) { Session[ " ...
-
css之字体的引用
font-family 属性设置文本的字体系列. font-family 属性应该设置几个字体名称作为一种"后备"机制,如果浏览器不支持第一种字体,他将尝试下一种字体. 注意: 如 ...