首页 > 代码库 > C#操作IE浏览器

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 = http://www.mamicode.com/"";
    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(希望有人能告诉我)。