zoukankan      html  css  js  c++  java
  • PowerShell2.0之与COM对象交互(四)IE自动化

    上一篇文章主要介绍了powershell中通过COM操作Excel,本篇文章中将会着重介绍powershell中通过COM操作IE达到自动化管理的目的。

    Internet Explorer浏览器提供基于COM的富对象模型,可以用来编写网站的自动化测试脚本模仿用户操作,如输入文字和单击按钮等并用浏览器创建提交信息的脚本。

    能够编程控制Internet Explorer的仍然是application对象,其ProgID是InternetExplorer.Application。完成自动化范例脚本需要的操作步骤如下。

    (1)创建Internet Explorer Application对象。

    (2)浏览一个URL。

    (3)等待浏览器载入文档内容。

    (4)操作文档。

    (5)通过调用Quit()方法退出Application。

    如果Internet Explorer在后台浏览并下载网页内容,则意味着脚本将不会被阻塞,当尝试操作未曾下载完毕的文档时将会崩溃。可以使用sleep cmdlet来阻塞脚本的执行并周期性地检查application的Busy属性是否为$false来确定下载是否完成,下载完成后访问和修改网页文件才是安全的。

    (1)用脚本控制浏览器进程

    下面使用Internet Explorer自动化对象打开浏览器窗口并通过Google搜索引擎搜索内容。这里创建一个名为“Search-GoogleCom.ps1”的脚本,其中将实例化Internet Explorer、浏览搜索引擎、输入搜索关键字并单击按钮。然后显示浏览器窗口检查搜索结果,并继续浏览选择的条目。该脚本的代码如下:

    function WaitForLoad ($ie)

    {

    while ($ie.Busy)

    {

    sleep -milliseconds 50

    }

    }

    $ie = New-Object -COM InternetExplorer.Application

    $ie.Navigate("http://www.google.com")

    $ie.Visible = $true

    WaitForLoad($ie)

    $searchBox = $ie.Document.getElementById("q")

    $searchBox.value = "`"Windows PowerShell`""

    $goButton = $ie.Document.getElementByID("btnG")

    $goButton.click();

    其中的WaitForLoad函数每隔50毫秒检查浏览器是否处于繁忙状态,如果繁忙,则继续等待50毫秒,期间需要调用sleep来释放由循环占用的CPU的资源。而对于用户来说,50毫秒的停顿在等待页面加载完成时的感觉并不明显。

    加载页面完成后需要开始操作文档中的对象,获取HTML文档对象通过Document属性,它支持所有Web开发人员熟悉的方法和属性。使用getElementById()方法获取文本框的引用,其中保存搜索关键字。搜索按钮的ID是“btnG”,通过设置文本框的Value属性可以将关键字输入到文本框中。在脚本中设置的搜索关键字是“"Windows PowerShell"”,它由引号引起,这样可以把其中的空格也作为搜索内容来匹配整个词汇。在执行上述操作后调用了按钮的click()方法,提交表单数据。默认情况下Internet Explorer窗口不可见,通过设置Visible属性为$true使窗口可见。图2-17所示为该脚本的执行结果。

    image

    图1 执行结果

    如果需要在不显示浏览器窗口的情况下提取远程主机中的页面信息,则使用HTML文档对象模型(DOM)编程接口。这是一组由W3C组织定义的标准接口,能够在任何浏览器中使用JavaScript代码操作。有Web编程经验的读者会注意到前面有使用getElementById()方法通过Internet Explorer的COM接口调用任何DOM元素的实例。

    【提示】

    DOM编程接口由W3C组织和微软共同发布,其中W3C主要关注在所有浏览器上如何运行,而事实上没有浏览器是完全按照标准实施的。微软主要将W3C的标准落实到Internet Explorer的具体的解析方法上,其DOM解析文档网址是http://msdn.microsoft.com/en-us/library/
    ms533050.aspx。

    为了演示操作HTML DOM对象,创建一个名为“Get-WebSearchResults.ps1”的脚本。它以静默方式访问Google.com,提交查询并将返回的查询结果中包含的链接页面打印到控制台上。这个脚本主要依靠Google.com生成的ID为“res”的<div>HTML元素,并从中提取出网页链接。而链接是<a>元素包含href属性,其中包含的URL为所需。该脚本的代码如下:

    function WaitForLoad ($ie)

    {

    while ($ie.Busy)

    {

    sleep -milliseconds 50

    }

    }

    $ie = New-Object -COM InternetExplorer.Application

    $ie.Navigate("http://www.google.com")

    $ie.Visible = $true

    WaitForLoad($ie)

    $searchBox = $ie.Document.getElementById("q")

    $searchBox.value = "`"Windows PowerShell`""

    $goButton = $ie.Document.getElementByID("btnG")

    $goButton.click();

    WaitForLoad($ie)

    $resultsDiv = $ie.Document.getElementById("res")

    $links = [object[]] $resultsDiv.getElementsByTagName("a")

    $realLinks = $links | where { $_.innerText -ne "Cached page" }

    $realLinks | select innerText,href | Format-List

    $ie.Quit()

    GetElementByTagName()方法返回所有指定标签的子元素,用户可以用来获取页面中包含的所有“res”元素。在其中过滤链接中包含“Cached page”的缓存页面,因为这些链接仅包含Google缓存服务器中的各版本的缓存,由于没有大的实际意义,所以这里将此类内容丢弃。在确认收集的链接中包含的innerText和href属性并将其通过Format-List cmdlet格式化,图18所示为该脚本的执行时结果。

    image

    图2 执行结果

    PowerShell为COM对象提供了近乎完美的支持,本文的实例涉及主要的交互性操作,如使用集合和索引属性。只要不同的应用程序和服务已经具有公开的COM自动化接口,则可尝试使用COM来提高工作效率。本文介绍了针对Internet Explorer浏览器的自动化编程,用户可以通过以上的介绍扩展到对其他COM对象进行操作。

    作者: 付海军
    出处:http://fuhj02.cnblogs.com
    版权:本文版权归作者和博客园共有
    转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢
    要求:未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
    个人网站: http://txj.shell.tor.hu/

  • 相关阅读:
    mongodb修改和删除操作
    mongodb常用查询语句
    ejs常用功能函数
    Rails + React +antd + Redux环境搭建
    nodejs安装和卸载
    Git 建立仓库及常用命令速查表
    使用MVC5+Entity Framework6的Code First模式创建数据库并实现增删改查功能
    gem devise配置
    Ubuntu16.04安装postgresql9.4及pgadmin3图形管理界面
    Rails Migration Data Model栏位修改及数据类型介绍
  • 原文地址:https://www.cnblogs.com/fuhj02/p/1915446.html
Copyright © 2011-2022 走看看