我正在尝试使用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组合。
答案 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)
试试这个。