powershell IE自动化href问题

时间:2017-05-04 03:15:50

标签: powershell automation webpage access

我正在尝试使用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;
&#13;
&#13;

1 个答案:

答案 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”的内容。 一个数字是这里最好的选择,因为它会在刷新时继续增长,假设页面上没有其他内容符合这个应该是好的。