4

我正在尝试测试我们构建的具有临时 ssl 证书的网页,问题是当我转到该页面时,我收到 IE 安全警告,表明 ssl 证书无效,有两个链接一个用于关闭页面,并且另一个进入页面。我可以使用powershell打开IE并单击ssl警告页面上的链接,但现在我需要填充用户名和密码输入框,然后单击登录按钮。

$url = "res://ieframe.dll/invalidcert.htm?SSLError=50331648#https://10.2.2.1:8050/showme.do"
$ie = New-Object -comobject InternetExplorer.Application 
$ie.visible = $true 
$ie.silent = $true 
$ie.Navigate( $url )
while( $ie.busy){Start-Sleep 1} 
$secLink = $ie.Document.getElementsByTagName('A') | Where-Object {$_.innerText -   eq 'Continue to this website (not recommended).'} 
$secLink.click() 
$ie.Document.getElementsByType("input") | where { $.Name -eq "j_username" }.value = "user"
$ie.Document.getElementsByName("input") | where { $.Name -eq "j_password" }.value = "password"
$loginBtn = $ie.Document.getElementsById('input') | Where-Object {$_.Type -eq 'button' -and $_.Value -eq 'LoginButton'} 
$loginBtn.click() 

所以现在页面打开了,但是输入字段没有被填充或按钮被点击,我需要某种循环或 while 语句吗?

谢谢

4

3 回答 3

3

当您单击链接时,您需要等到页面完成加载。

$url = "res://ieframe.dll/invalidcert.htm?SSLError=50331648#https://10.2.2.1:8050/showme.do"
$ie = New-Object -comobject InternetExplorer.Application 
$ie.visible = $true 
$ie.silent = $true 
$ie.Navigate( $url )
while( $ie.busy){Start-Sleep 1} 
$secLink = $ie.Document.getElementsByTagName('A') | Where-Object {$_.innerText -   eq 'Continue to this website (not recommended).'} 
$secLink.click() 
while( $ie.busy){Start-Sleep 1}
$ie.Document.getElementsByType("input") | where { $.Name -eq "j_username" }.value = "user"
$ie.Document.getElementsByName("input") | where { $.Name -eq "j_password" }.value = "password"
$loginBtn = $ie.Document.getElementsById('input') | Where-Object {$_.Type -eq 'button' -and $_.Value -eq 'LoginButton'} 
$loginBtn.click() 
于 2012-06-04T07:41:46.713 回答
3
Write-Output "- Kill all IE windows"
get-process iexplore | stop-process -Force
Start-Sleep -s 1

为给定 url 打开 IE 并从加密文件中检索密码的函数

function OpenIE([string]$url, [string]$p)
{

使用给定的 url 打开 Internet Explorer

$wshell = New-Object -com WScript.Shell
$wshell.Run("iexplore.exe $url")
Start-Sleep 1

将用户凭据发送到 IE

$wshell.sendkeys("+{TAB}")
$wshell.sendkeys("username")
$wshell.sendkeys("{TAB}")
$wshell.sendkeys($p)
$wshell.sendkeys("{ENTER}")
}

$credentialsfile = "C:\temp\credfile.txt" 

检查凭证文件是否存在

if (Test-Path $credentialsfile)
{  

从加密文件中检索凭据

$encp = get-content $credentialsfile | convertto-securestring 
$ptr = [System.Runtime.InteropServices.Marshal]::SecureStringToCoTaskMemUnicode($encp) 
$p = [System.Runtime.InteropServices.Marshal]::PtrToStringUni($ptr) 
remove-variable encp,ptr 
}else{

请求凭据并保存到加密文件

$creds = Get-Credential –credential DOMAIN\user
$encp = $creds.password 
$encp |ConvertFrom-SecureString |Set-Content $credentialsfile
}

Write-Output "- open IE"
OpenIE "http://www.yoururlhere.com" $p
于 2012-08-02T14:46:45.990 回答
0

您可能会发现在 codeplex 上使用(免费)PowerShell 的 Windows 自动化模块之类的东西要容易得多:

WASP 是用于 Windows 自动化任务的 PowerShell 管理单元,例如选择窗口和控件以及发送鼠标和键盘事件。我们有自动化 cmdlet,例如 Select-Window、Select-Control、Send-Keys、Send-Click、Get-WindowPosition、Set-WindowPosition、Set-WindowActive、Remove-Window ... 等。

我们的目标是使您能够从 PowerShell 内部完成大多数 Windows GUI 自动化脚本,而无需求助于专门的(且昂贵的)脚本工具。

http://wasp.codeplex.com/

于 2012-05-03T17:54:45.430 回答