2017-05-04 66 views
1

我想使用powershell访问Jtrac网页。我能够登录,但我无法访问搜索按钮哪个href链接。powershell IE自动化href问题

$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:(点击:字符串)[],RuntimeException的 + FullyQualifiedErrorId:InvokeMethodOnNull

<a href="?wicket:interface=:2:table:dashboardRows:3:dashboardRow:search::ILinkListener::"> 
 
<img title="SEARCH" src="../resources/search.gif"> </a>

回答

0

看起来你有19行,ILinkListen er::一个错字在结束你的而不是ILinkListener::。哪里找不到匹配的东西,所以它返回null,这就是你如何得到你的空值$ Login对象。

编辑:你的问题仍然是第19行,你应该打印出$IE.Document.getElementsByTagName("a")并确认它实际上正在返回你所期望的,因为你的where过滤器不匹配任何内容并返回$ null到$ Login。编辑2:去了一个网站,抓住了所有的hrefs并看了看,powershell从hrefs中删除了“”。您可以改为$IE.Document.getElementsByTagName("a") | where {$_.href -eq "?wicket:interface=:2:table:dashboardRows:3:dashboardRow:search::ILinkListener::"}

编辑3:您的第二个问题可以用正则表达式使用-match运算符来解决,而不是-eq(如果您检查的项目是dyanmic,-eq不会真正起作用)。

像这样:

$IE.Document.getElementsByTagName("a") | where {$_.href -match "\?wicket:interface=:\d"}

此正则表达式将返回任何containts “检票:界面=:数字”。 一位数字是最好的选择,因为它会在刷新时保持增长,假设页面上没有其他内容匹配,这应该是好的。

+0

对不起。当我粘贴在这里的错字错误... –

+0

我已根据您的信息更新了我的答案。 – Phil

+0

仍然没有运气,得到同样的错误。 –