我在脚本中使用了以下成功:
$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,因此不需要试着在最后一刻找到它。
非常感谢任何帮助。
答案 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;哦!
事实上,它是一个集合,我向你保证。您可以通过两种方式访问第一项。使用数组表达式求值运算符 @()将集合转换为数组。然后,您可以使用括号和基于0的索引对其进行索引,就像通常使用PowerShell数组一样:
@($ie.Document.getElementsByName('USERID'))[0].value = $user
管道到选择对象并选择第一个元素:
($ie.Document.GetElementsByName('USERID') | select -First 1).value = $user