Powershell将数据输入网站 - 在GetElementByName上找不到属性值

时间:2017-03-22 16:11:36

标签: powershell

我正在使用以下代码与工作中的html网站进行交互,当我尝试运行该部分时,登录的第一部分有效

($ie.document.getElementsByName("textSearch") | select -first 1).value = "12345";

我收到以下错误

  

在此对象上找不到属性“value”。验证该属性是否存在且可以设置。

     

C:\ Users \ lawsod03 \ desktop \ powershell \ DCS-remove.ps1:23 char:1

     

+($ ie.document.getElementsByName(“businessArea”)| select -first 1).value =“MCS_C ...

     

+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

     

+ CategoryInfo:InvalidOperation:(:) [],RuntimeException

     

+ FullyQualifiedErrorId:PropertyNotFound

这是我目前正在尝试向

添加值的输入字段
<td class="td_prompt">
    <input name="textSearch" value="">&nbsp;by
</td>

PowerShell脚本如下:

cls
$username = "user";
$password = "pass";
$loginUrl = "www.website.com/login";
$MainCSA = "www.website.com/usersearch";
$iterator = 1;

#initialize browser
$ie = New-Object -com internetexplorer.application;
$ie.visible = $true;
$ie.navigate($loginUrl);
while ($ie.Busy -eq $true) { Start-Sleep -Seconds 1; } #wait for browser idle

#login
($ie.document.getElementsByName("username") |select -first 1).value = $username;
($ie.document.getElementsByName("password") |select -first 1).value = $password;
($ie.document.getElementsByName("submit") |select -first 1).click();
while ($ie.Busy -eq $true) { Start-Sleep -Seconds 1; }    #wait for browser idle

#navigate to maintain CSA
$ie.navigate($MainCSA);
while ($ie.Busy -eq $true) { Start-Sleep -Seconds 1; }    #wait for browser idle
($ie.document.getElementsByName("textSearch") |select -first 1).value = "12345";

我在网上搜索了一个解决方案但是我似乎无法找到一个能指出正确方向的解决方案。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

而不是使用select -f 1更改您的格式来执行像这样的强制取消引用(我还简化了您的代码):

function getEl ($ie, $name) {return @($ie.document.getElementsByName($name))[0]}
(getEl $ie 'username').value = $username
(getEl $ie 'password').value = $password
(getEl $ie 'submit').click()

这是因为 getElementsByName() 返回一个元素列表(虽然不在传统数组中,因此@()强制转换将其转换为PowerShell数组,然后你可以像普通数组一样去引用)。

这有帮助吗?