我确定之前必须已经回答过,但我想我不知道我应该在搜索术语中使用什么。
我试图让PowerShell点击一个简单的' a href'链接。但到目前为止,我发现点击事物的所有PowerShell示例都是使用按钮。当我尝试重写按钮点击脚本来点击链接而不是我得到一个"你不能在空值表达式上调用一个方法"错误信息。
我想点击的链接来源是:
<div id="reportTreer1r3" style="padding-left:32px;" uid="2.-83016" nowrap
class="treeNode" onClick="reportTree.onSelect('r1r3');" onDblClick="reportTree.onDblSelect('r1r3');
" BP_REPORT_ID="-83016" reportType="report" isRemovable="false">
<nobr>
<a href="#r1r3" onClick="return false;" onKeyDown="reportTree.onKeyDown(this);">
<span>
<label class="hidden-label"> Tree level 1, 4 of 4. </label>
<span>Adherence Summary</span>
</span>
<label name="SelectInfo" class="hidden-label"></label>
</a>
</nobr>
</div>
不幸的是,链接没有被赋予自己的元素ID,所以我不能只是&#34; getElementByID&#34;在它上面,我尝试了一系列的事情......
$link = $doc.getElementsByTagName('a') | Where-Object {$_.href -eq '#r1r3'}
$link.click()
......但似乎没有任何效果。
任何建议都会非常感谢!
答案 0 :(得分:1)
我认为这里的问题不完全是您的代码,而是您用来选择特定链接的内容。你需要以严肃的角色逃脱#
。你也想使用-match而不是-eq,因为$ _。href包含的不仅仅是#r1r3,它只是结束了。
$link = $doc.getElementsByTagName('a') | Where-Object {$_.href -match '`#r1r3'}
$link.click()
那应该适合你。
编辑:这就是我的所作所为。我将示例HTML保存在桌面上的文档test.html中,因为我这样懒。然后我做了:
$ie = new-object -ComObject InternetExplorer.Application
$ie.Navigate("C:\users\310080829\Desktop\test.html")
$IE.Document.getElementsByTagName('a')
现在吐了很多东西,所以如果我不把它全部贴在这里,你就要原谅我。但后来我尝试了Where位:
$IE.Document.getElementsByTagName('a')|?{$_.href -match '`#r1r3'}
......它没有任何回报。嗯... WTF。哦,等等,我用单引号而不是双引号。哎呀,再试一次-match&#34;`#r1r3&#34;事情变得更好。
$IE.Document.getElementsByTagName('a')|?{$_.href -match "`#r1r3"}
这是票!现在我有一个可以使用的对象。是的,当然,有些属性是正确还是错误,但还有其他一些东西,比如InnerHTML,InnerText,OuterHTML,OuterText ......好吧,很多。另外,如果我将其传递给|GM
,它会列出对象的所有属性和方法......包括Click
。
所以,我认为真正的问题是我复制并粘贴了你的代码并稍微修改了一下,我并没有真正注意到这些代码。 vs&#34;问题。再试一次:
$link = $doc.getElementsByTagName('a') | Where-Object {$_.href -match "`#r1r3"}
$Link.Click
我的经验教训,对此感到困惑。
答案 1 :(得分:0)
如果链接(href)位于框架内,您可以使用:
while($ie.busy) {sleep 5}
$dmeContExpFrame = $ie.Document.getElementById("portfolio_frameset")
$dmecontexpframedoc = $dmeContExpFrame.contentWindow
$dmeContExpFramedoc2 = $dmecontexpframedoc.Document
$click1 = $dmeContExpFramedoc2.getElementsByTagName("a") | ?{$_.href -match "system_status.ssi"}
$click1.click()