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

q9yhzks0  于 12个月前  发布在  Shell
关注(0)|答案(3)|浏览(78)

标签: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"
错误是“无法索引到空数组”。

qjp7pelc

qjp7pelc1#

你可能把事情搞复杂了。前几次我需要用脚本登录一个网站,我没有用文档。表单,我只是得到了文档元素。试试这个:

$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()

是的,它可能比需要的时间长一点,但它很容易根据需要进行跟踪和编辑,而且它在过去一直对我有效。您可能需要编辑一些元素名称(我猜的是密码字段元素和登录按钮元素的名称,所以请检查它们)。

kxe2p93d

kxe2p93d2#

可能会出现找不到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

xytpbqjk

xytpbqjk3#

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

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

相关问题