使用Powershell进行IE自动化

时间:2014-05-29 20:58:07

标签: windows internet-explorer powershell

我正在尝试使用Powershell和IE自动登录我们内部网上的网站。到目前为止,我有以下代码可用:

$ie = new-object -com "InternetExplorer.Application" 
$ie.navigate("https://somepage/jsp/module/Login.jsp/")
while($ie.ReadyState -ne 4) {start-sleep 1} 
$ie.visible = $true 
$doc = $ie.Document
If ($doc.nameProp -eq "Certificate Error: Navigation Blocked") {
    $doc.getElementByID("overridelink").Click()
}
$loginid = $doc.getElementById("loginid") 
$loginid.value= "username"
$password = $doc.getElementById("password")
$password.value = 'somepass'
$ie.navigate("javascript:doSubmit('login')",$null,$true)

所以,我现在的问题是网站关闭用于登录的原始窗口并打开一个新的IE窗口。如何向新窗口提交输入?我知道我可以使用像tasklist.exe / v这样的东西来获取新窗口的PID ......但是我不确定如何控制它。

此外,在查看我的代码后,请知道我不打算使用嵌入式用户名和密码。这是唯一的,所以每次我想测试脚本时,我都不必连续输入un / pw组合。

3 个答案:

答案 0 :(得分:2)

再尝试一下......

$applist = new-object -com shell.application
$newie = $applist.windows() | where {$_.Type  -eq "HTML Document" -and $_.LocationURL -match "MainFrame.jsp"}

答案 1 :(得分:2)

我找到了一个旧的 article ,通过遍历Shell.Application对象的窗口来描述如何执行您要查找的内容。我不得不说,虽然它看起来可能并且确实似乎回答了你的直接问题,但这种做法对我来说似乎非常不愉快和脆弱。

如果你不反对尝试不同的方法,我建议给予 Selenium Webdriver 一个镜头。您可以使用Internet Explorer驱动程序, documentation 中的C#示例通常可以很好地转换为PowerShell。您还可以获得其他一些好处,例如其他Web浏览器的驱动程序或等待条件而不是依赖睡眠/检查循环的能力。您还将拥有driver.switchTo()功能,允许您在窗口或框架之间跳转。

答案 2 :(得分:0)

试试这个。

  1. $ shell =(New-Object -ComObject Shell.Application).Windows()
  2. $ shell.Count
  3. 7
  4. 你有0-6项,你可以这样检查。
  5. $ shell.Item(0).LocationName
  6. $ shell.Item(0).LocationURL
  7. $ shell.Item(1).LocationName
  8. $ shell.Item(1).LocationURL