相关:Powershell: Download or Save source code for whole ie page
我需要以编程方式驱动的输入字段没有ID,所以我试图用表单名称来设置它们。
在IE F12开发人员控制台中,此命令有效:
document.forms["loginForm"].elements["_ssoUser"].value = "someone's username"
但在PowerShell中,此命令失败:
$ie.document.forms["loginForm"].elements["_ssoUser"].value = "$username"
错误是“无法索引到空数组”。
答案 0 :(得分:0)
你可能会因此而复杂化。最近几次我需要使用脚本登录到一个网站,我没有使用document.forms,我只是得到了文档元素。试试这个:
$Doc = $IE.Document
$UserNameField = $Doc.getElementById('_ssoUser')
$UserNameField.value = "$username"
$PassField = $Doc.getElementById('_ssoPassword')
$PassField.value = "$Password"
$LoginButton = $Doc.getElementById('LoginBtn')
$LoginButton.setActive()
$LoginButton.click()
是的,它可能比需要的时间长一些,但是根据需要可以很容易地跟踪和编辑,而且过去它总是对我有用。您可能需要编辑一些元素名称(我猜测了密码字段元素的名称和登录按钮元素,所以请检查它们。)
答案 1 :(得分:0)
您可能无法找到ID但您可以使用标记名称。我使用麻省理工学院的网站向您展示了如何做到这一点的例子。
# setup
$ie = New-Object -com InternetExplorer.Application
$ie.visible=$true
$ie.navigate("http://web.mit.edu/")
while($ie.ReadyState -ne 4) {start-sleep -m 100}
$termsField = $ie.document.getElementsByName("terms")
@($termsField)[0].value ="powershell"
$submitButton = $ie.document.getElementsByTagName("input")
Foreach($element in $submitButton )
{
#look for this field by value this is the field(look for screenshot below)
if($element.value -eq "Search"){
Write-Host $element.click()
}
}
Start-Sleep 10
答案 2 :(得分:0)
很可能是IFRAME中的一个表单,所以按ID获取IFRAME,然后通过ID获取表单,然后通过名称选择子对象:(sim。用于密码字段和登录按钮)。
($ie.document.getElementbyID("content").contentWindow.document.getElementbyID('loginForm') | Where-Object {$_.name -eq "_ssoUser"}).value = "username"