PowerShell以编程方式在IE中按名称设置输入字段

时间:2015-03-02 17:45:56

标签: internet-explorer powershell

相关: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"

错误是“无法索引到空数组”。

IE console shows working command, but fails when PowerShell attempts to send the same to the scripted instance of IE.

3 个答案:

答案 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

enter image description here

答案 2 :(得分:0)

很可能是IFRAME中的一个表单,所以按ID获取IFRAME,然后通过ID获取表单,然后通过名称选择子对象:(sim。用于密码字段和登录按钮)。

($ie.document.getElementbyID("content").contentWindow.document.getElementbyID('loginForm') | Where-Object {$_.name -eq "_ssoUser"}).value = "username"