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

问题描述 投票:0回答:3

相关:Powershell:下载或保存整个ie页面的源代码

我需要以编程方式驱动的输入字段没有 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.

internet-explorer powershell
3个回答
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()

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


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


0
投票

很可能是 IFRAME 中的表单,因此通过 id 获取 IFRAME,然后通过 ID 获取表单,然后按名称选择子对象,例如:(模拟密码字段和登录按钮)。

($ie.document.getElementbyID("content").contentWindow.document.getElementbyID('loginForm') | Where-Object {$_.name -eq "_ssoUser"}).value = "username"
© www.soinside.com 2019 - 2024. All rights reserved.