我正在尝试使用PowerShell访问Jtrac网页。我能够登录但我无法访问链接的搜索按钮。
$Url = “http://kbserver/workflow/app/login”
enter code here`$Username=”XXXXX”
enter code here`$Password=”XXXXX”
$IE = New-Object -com internetexplorer.application;
$IE.visible = $true;
$IE.navigate($Url);
while ($IE.Busy -eq $true)
{
Start-Sleep -Milliseconds 2000;
}
$Login = $IE.document.getElementById("loginName3").value = "$Username"
$Login = $IE.Document.getElementById(“password12”).value= "$Password"
$Login = $IE.Document.getElementsByTagName("input") | where-object {$_.type -eq "submit"}
$Login.click();
while ($IE.Busy -eq $true)
{
Start-Sleep -Milliseconds 5000;
}
$Login = $IE.Document.getElementsByTagName("a") | where {$_.href -eq "'?wicket:interface=:2:table:dashboardRows:3:dashboardRow:search::ILinkListen er::'"}
$Login.click();
我得到的错误是
您无法在空值表达式上调用方法。 在C:\ Users \ Dinesh \ Webbb.ps1:20 char:13 + $ Login.click<<<< (); + CategoryInfo:InvalidOperation :( click:String)[],RuntimeException + FullyQualifiedErrorId:InvokeMethodOnNull
<a href="?wicket:interface=:2:table:dashboardRows:3:dashboardRow:search::ILinkListener::">
<img title="SEARCH" src="../resources/search.gif"> </a>
&#13;
答案 0 :(得分:0)
看起来你在第19行有一个拼写错误,ILinkListen er::
在你的地方而不是ILinkListener::
。哪里找不到匹配的东西,所以它返回null,这就是你获取空值$ Login对象的方法。
编辑:您的问题仍然是第19行,您应该打印$IE.Document.getElementsByTagName("a")
并确认它实际上返回了您的预期,因为您的where
过滤器不匹配任何内容并返回$ null到$ Login
Edit2:去了一个网站并抓住了所有的hrefs并看一看,powershell从href中删除了“”。
您应该改为$IE.Document.getElementsByTagName("a") | where {$_.href -eq "?wicket:interface=:2:table:dashboardRows:3:dashboardRow:search::ILinkListener::"}
。
编辑3:您的第二个问题可以使用正则表达式使用-match
运算符而不是-eq来解决(如果您检查的项目是动态的,则-eq无法正常工作)。
像这样:
$IE.Document.getElementsByTagName("a") | where {$_.href -match "\?wicket:interface=:\d"}
这个正则表达式将返回任何包含“?wicket:interface =:digit”的内容。 一个数字是这里最好的选择,因为它会在刷新时继续增长,假设页面上没有其他内容符合这个应该是好的。