我试图使用Powershell和IE在Intranet上自动login到网站。 到目前为止,我有以下代码工作:
$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)
所以,我现在所面临的问题是网站closures了用于login的原始窗口并打开一个新的IE窗口。 我如何着手将input提交到新窗口? 我知道我可以使用像tasklist.exe / v的东西来获得新的窗口的PID …但我不知道如何去控制它。
另外,查看我的代码后,请知道我不打算使用embedded式用户名和密码。 这只是为了让我不用每次我想testing脚本时不断地inputun / pw组合。
在尝试了更多…
$applist = new-object -com shell.application $newie = $applist.windows() | where {$_.Type -eq "HTML Document" -and $_.LocationURL -match "MainFrame.jsp"}
我找到了一篇介绍如何通过循环访问Shell.Application
对象的窗口来完成要查找的内容的旧文章 。 我不得不说,虽然看起来有可能,似乎回答你的直接问题,但这种做法似乎对我来说是相当不愉快和脆弱的。
如果你不想尝试不同的方法,我会建议给seleniumium Webdriver一个镜头。 您可以使用Internet Explorer驱动程序,并且文档中的C#示例通常可以很好地转换为PowerShell。 您还可以获得其他好处,例如其他Web浏览器的驱动程序或等待状态而不是依赖睡眠/检查循环的功能。 您也将有一个driver.switchTo()
函数,允许您在窗口或框架之间跳动。
尝试这个。