zoukankan      html  css  js  c++  java
  • 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(希望有人能告诉我)。

  • 相关阅读:
    How do I add elements to a Scala List?
    Can you share some Scala List class examples?
    How to add elements to a List in Scala
    数据结构和算法学习三,之递归和堆栈
    数据结构和算法学习二,之循环和递归
    数据结构和算法学习一,开篇
    Android Skia和2D图形系统 .
    EGL接口介绍-----Android OpenGL ES底层开发
    OpenGL网络资源
    OpenGL—Android 开机动画源码分析二
  • 原文地址:https://www.cnblogs.com/mingxuantongxue/p/3732117.html
Copyright © 2011-2022 走看看