我成功地使用了来自此站点的Web自动化脚本:Heise Web Automation
我知道这是德语,但也许有人可以帮忙。
e-plus网站的重要部分:
<tr>
<td class="td1">Benutzername:</td>
<td class="space"><img src="/img/c.gif" alt="" /></td>
<td class="td2"><input type="text" id="IDToken1OL" name="IDToken1" onfocus="setToken(this)" onblur="getToken(this)" value="Benutzername" /></td>
</tr>
<tr>
<td class="td1">Passwort:</td>
<td class="space"><img src="/img/c.gif" alt="" /></td>
<td class="td2"><input type="password" id="IDToken2OL" name="IDToken2" onfocus="setToken(this)" onblur="getToken(this)" value="" class="passwortFake" /></td>
</tr>
Powershell 脚本的部分:
$script:ie = New-Object -comobject InternetExplorer.Application
$ie.visible = $false
$ie.silent = $true
#
$ie.Navigate("https://www.eplus.de/login/login.asp")
LadenWarten(1)
#
$ie.Document.getElementById("IDToken1OL").value = $user
$ie.Document.getElementById("IDToken2OL").value = $passwort
$ie.Document.getElementsByTagName("a") | foreach {
if ($_.href -eq "javascript:SSO_Submit()") {
$_.Click()
}
}
getElementById 适用于 ie8,但现在我已经更新到 ie9,它不再工作了。
错误消息:
+ $ie.Document.getElementById <<<< ("IDToken1OL").value = $user
+ CategoryInfo : NotSpecified: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MethodCountCouldNotFindBest
参数的计数是错误的。
我所能找到的只是一个提示,在ie9中getElementById发生了变化。
有人可以帮忙吗?
谢谢,大卫
参见 http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/Q_27920160.html --
引用:"我应该使用成员调用:
$ie = new-object -com "InternetExplorer.Application"
$ie.navigate("about:blank")
$doc = $ie.Document
$element = [System.__ComObject].InvokeMember(“getElementById”,[System.Reflection.BindingFlags]::InvokeMethod, $null, $doc, $id)
对于getElementsByTagName:
$elements = @([System.__ComObject].InvokeMember(“getElementsByTagName”,[System.Reflection.BindingFlags]::InvokeMethod, $null, $doc, $tagname))
"
当仅自动化一个具体站点(并且脚本不是通用的或任何站点)时,您可以尝试在IE设置(工具->兼容性视图设置)中设置兼容性视图。IE 应在浏览网站时切换到 IE8 视图。
使用 querySelector 的示例:
$element = [System.__ComObject].InvokeMember("querySelector",[System.Reflection.BindingFlags]::InvokeMethod, $null, $ie.Document, "$QueryHere")