上一篇文章主要介绍了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所示为该脚本的执行结果。
图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”的 HTML元素,并从中提取出网页链接。而链接是元素包含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所示为该脚本的执行时结果。
图2 执行结果
PowerShell为COM对象提供了近乎完美的支持,本文的实例涉及主要的交互性操作,如使用集合和索引属性。只要不同的应用程序和服务已经具有公开的COM自动化接口,则可尝试使用COM来提高工作效率。本文介绍了针对Internet Explorer浏览器的自动化编程,用户可以通过以上的介绍扩展到对其他COM对象进行操作。
作者: 付海军
出处:http://blog.csdn.net/fuhj02
版权:本文版权归作者和csdn共有
转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢
要求:未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
个人网站: http://txj.shell.tor.hu/
发表评论
-
C#字符串替换_无视大小写
2012-07-06 09:52 795源代码翻译工具基本完成了,只剩下最后问题:就是对字符串进行 ... -
java正则表达式验证整数、浮点数和日期
2012-07-06 09:46 1148/** * 检查日期格式 * @param date * ... -
mailto语法
2012-07-06 09:30 641i am now in university(HIT@We ... -
(二)启动组件:intent
2012-07-03 13:44 658当有一个来自于content resolver的请求指向C ... -
flex list/tilelist drag scroll的speed移动太快
2012-07-02 12:47 681最近项目中遇到tilelist中拖拽的时scroll的移动 ... -
flex4:中DataGroup组件获取数据源(ArrayCollection方式)实例
2012-07-02 12:47 533flex/spark" xmlns:mx=&q ... -
[ActionScript3.0][My flex]读书笔记三之 模块化编程
2012-07-02 12:47 5351.加载mxml模块 第一步: 新建mxml模块:Data ... -
Flex 4 控件居中问题
2012-07-02 12:46 648今天尝试了一下,flex4开发,做了个panel,设置Ap ... -
Flex+Java 导出PDF文件(大小不定)时进度条应用
2012-07-02 12:46 6221.当点击"导出到PDF"按钮时,会弹 ... -
Flex ColumnChart verticalAxis 中的title在变换皮肤时的异常
2012-07-01 10:11 797在ColumnChart 中添加了title的显示,但在更 ... -
Flex数据绑定陷阱(二)
2012-07-01 10:11 538尝试绑定一个没有包含IPropertyChangeNoti ... -
在Flex Mobile中构建“本地”菜单
2012-07-01 10:11 691Adobe Flash Builder 4 简体中文正式版 ... -
给你的Flex程序添加深链接和分析-其实比你想象的要简单
2012-07-01 10:11 717Adobe Flash Builder 4 简 ... -
Flex 数据易犯错误: 常见误用和错误
2012-07-01 10:11 502在某些情形下,绑定操作似乎不能正常工作,此时你可能非常懊恼 ... -
记忆游戏(flex3版)
2012-06-30 16:35 614记忆游戏(flex3版) 2010年12月12日 接触f ... -
flash develop vs flex builder
2012-06-30 16:35 457flash develop vs flex builder ... -
从Lex&Yacc说到编译器(二、flex的使用)
2012-06-30 16:35 694从Lex&Yacc说到编译器(二、flex的使用) ... -
[转]使用Flash、HTML和Unity开发网页游戏的现实比较
2012-06-30 16:35 1086[转]使用Flash、HTML和Unity ... -
【FLEX学习】第二天
2012-06-30 16:35 313【FLEX学习】第二天 2011年02月14日 米写日志 ...
相关推荐
Windows PowerShell 2.0语言对象与对象类型 Windows PowerShell 2.0 开发之命令别名 (1) Windows PowerShell 2.0语言的内置类型系统 Windows PowerShell 2.0语言之字面类型系统 Windows PowerShell 2.0语言之分支...
Windows Server 2003的32位PowerShell2.0下载
Windows Management Framework Release Candidate Windows PowerShell 2.0 and WinRM 2.0 Localized Package with Release Notes For x86 versions of Windows XP SP3.
Microsoft Windows PowerShell 是一种新的命令行外壳和脚本语言,用于进行系统治理和自动化。Windows PowerShell 建立在 .NET Framework 的基础上,IT 专业人员可通过命令或脚本来治理计算机,从而通过系统自动化来...
Windows Powershell 2.0,编程资源
Windows PowerShell 2.0
Windows Server 2008 r2 中 将PowerShell2.0 升级到 PowerShell3.0,希望能帮助到你。
微软出的《Windows PowerShell 2.0 图形帮助文件》
是微软的下一代命令解释器的Shell程序,能够让管理员自动化和控制Windows桌面及服务器。PowerShell原来的开发代号是Monad,原计划是用以替代Windows中的命令行工具,但是后来微软说它只是技术上的扩充.使用PowerShell,...
WindowsXP-KB968930-x86-CHS(Windows PowerShell 2.0).rar
powershell 2.0 CTP,安装时机器中不能能安装早期的1.0版本,安装时需要WS management.
windows powershell 2.0 安装包
xp 下 powershell2.0 被微软支持的最后一个版本,完整版,带winrm 不需要单独安装。powershell可以进行远程命令行配置服务和计划,配合脚本完成复杂操作
书名wilson e. - windows powershell 2.0. best practices - 2010就表明一切! 适合高级读者!!!
安装EFCodeFirst之前必先安装的服务
Chapter 1: PowerShell Scripting Methods and Creating Custom Commands 7 Introduction 7 Setting up your Virtual Machine and running a test script 8 Authoring, debugging, and executing script accessing ...
Microsoft.Press.Windows.PowerShell.2.0.Administrators.Pocket.Consultant.May.2009.rar
之所以造成一些混淆是因为微软不再单独提供PowerShell 2.0,而是将其整合到了Windows管理架构(Management Framework)中。 微软工程师Jeffrey Snover表示:“这一混淆是我们造成的,因为它的重新发布不再称为...
powershell4.0完整升级包(windows powershell升级补丁系统4.0版本) windows08R2 powershell升级到4.0的完整升级包,包含所有需要的依赖包。 注意:只适用于08R2系统; 另外:powershell4.0功能强大 可以批量添加AD域...
任务自动化框架Windows 的命令行 Shell 和脚本语言基于.NET框架受 UNIX shell 和脚本语言(如 Perl 和 Python)的启发Windows PowerShell 控制台 2.0 的屏幕截图术语Shell 与脚本语言(命令行)外壳Shell 是一种...