通过powershell在网站上输入用户名

时间:2014-11-09 09:52:13

标签: internet-explorer powershell browser

我在脚本中使用了以下成功:

$ie.document.getElementById("userid").value= "$user"

$comShell = New-Object -com "Wscript.Shell" 
$comShell.sendkeys($USERC)

当网站有<input id="userid">时,我使用了最顶层的网站,如果网站上的ID发生了变化,我只是对脚本做了一些小改动。我没有使用id定义输入,而是使用名称,因为似乎没有getElementByName的方法。这仅适用于默认情况下在userid字段上设置焦点的网站。

我现在遇到一个使用名称而不是id定义输入的站点,并且用户ID字段不是默认焦点。

我可以用这样的东西:

<INPUT SIZE="9" STYLE="font-family:Arial; font-size: 10pt; " type="text" name="USERID" maxlength="8" value="" onKeypress="passwordFocus(event)">

对于我的工作,我一直在创建一个实用程序,以促进许多任务,其中一个是一个链接区域,为我们经常使用的一些网站提供快捷方式(书签)并输入通用ID,因此不需要试着在最后一刻找到它。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

就像在JavaScript中一样,没有 GetElementByName()方法,因为多个元素可以具有相同的名称;相反,有一个 GetElement s ByName()方法,该方法返回具有给定名称的所有元素的集合。您需要使用此方法,并设置集合中第一个(也可能是唯一的)项的属性。

现在,在JavaScript中,它就像

一样简单
document.getElementsByName('USERID').value = 'myusername';

但是,在PowerShell中,访问集合中的项目可能有点棘手。它是一个COM集合,因此您无法使用括号将其编入索引,否则您将收到Unable to index into an object of type System.__ComObject错误。通常,使用带有基于1的索引的 Item()方法索引到COM集合。所以,你希望这可以工作:

$ie.Document.GetElementsByName('USERID').Item(1).value = $user

相反,您收到此错误:

  

方法调用失败,因为[System .__ ComObject]不包含名为&#39; Item&#39;。

的方法。

WTF ??这个系列没有索引! d&#39;哦!

事实上,它是一个集合,我向你保证。您可以通过两种方式访问​​第一项。

  1. 使用数组表达式求值运算符 @()将集合转换为数组。然后,您可以使用括号和基于0的索引对其进行索引,就像通常使用PowerShell数组一样:

    @($ie.Document.getElementsByName('USERID'))[0].value = $user
    
  2. 管道到选择对象并选择第一个元素:

    ($ie.Document.GetElementsByName('USERID') | select -First 1).value = $user