IE自动化

自动打开www.baidu.com,并搜索关键字“abcd”

 1 #定义函数:等待页面打开
 2 function WaitForLoad($ie)
 3 {
 4  sleep 2
 5  do {Sleep -Mi 200}
 6  while ($ie.busy)
 7 }
 8 
 9 $url="www.baidu.com"
10 $ie = new-object -com "InternetExplorer.Application"
11 $ie.navigate($url)
12 $ie.visible=$true
13 WaitForLoad $ie
14 #文字输入栏的ID为“kw”,搜索关键字为“abcd”
15 $ie.Document.getElementById("kw").Value="abcd"
16 #搜索按钮的ID为“su”,然后调用click()方法点击该按钮
17 $ie.Document.getElementById("su").click()

参考:http://msdn.microsoft.com/zh-cn/magazine/cc337896.aspx

 

查找页面元素ID方法:

 

在调用 getElementById() 方法的时候,如果出现如下错误提示:“找不到“getElementById”的重载,参数计数为:“1”。”,可尝试如下解决方法:

1)getElementByID对PS和IE版本有要求:如下:
  PS2.0 With IE8
  PS3.0 With IE9
2)兼容性视图设置
3)关闭保护模式

 注:PS4.0 With IE10下未解决该报错

#################################

$ie.Document.getElementByID("table_set_main").getElementsByTagName("input")|?{$_.value -eq "restart"}|%{$_.click()}

#重启路由:
http://192.168.5.243/sys_cfg_valid.xgi?exe_str("submit REBOOT")

 

2015.3.26补充:

有的页面中的登录窗口可能会在iframe中,这样的话,直接通过$ie.Document.getElementByID("username")的办法是取不到 username 的输入窗口的,需要先获取到相应的iframe,然后再getElementByID("username"),但是有的iframe不但没有id,也没有name,所以就只能先通过 $login = $ie.Document.getElementsByTagName("iframe") | ? {$_.uniqueNumber -eq 3} 这样的方法获取到相应的iframe了,iframe的uniqueNumber是自己先获取到所有的iframe后,自己找到相应的iframe后找到的,也可以用 sourceindex值。

可以使用下面几种方法去.getElementById("username"),哪个可用就用哪个。

$login.Dcument.getElementById("username")
$login.contentWindow.getElementById("username")
$login.contentDocument.getElementById("username")

但如果iframe涉及到了跨域,那使用上面的方法还是无法获取到相应的元素,目前不知如何解决。

如下图中的 iframe src= https://mailsso.mxhichina.com.....

但该URL为mail.zanchina.com,就涉及到了跨域。

posted on 2014-09-26 14:45  momingliu11  阅读(1816)  评论(0编辑  收藏  举报