自动打开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,就涉及到了跨域。