我确信这个问题之前一定已经得到回答,但我想我只是不知道我应该在搜索术语中使用什么。
我正在尝试让 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,所以我不能只是在它上面“getElementByID”,而是我尝试了很多类似的事情......
$link = $doc.getElementsByTagName('a') | Where-Object {$_.href -eq '#r1r3'}
$link.click()
...但似乎都不起作用。
如有任何建议,我们将不胜感激!
最佳答案
我认为这里的问题不完全是你的代码,而是你用来选择特定链接的问题。您需要使用重要字符 ` 来转义 #
。此外,您还想使用 -match 而不是 -eq,因为 $_.href 不仅仅包含 #r1r3,它只是以 #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 "`#r1r3",事情会变得更好。
$IE.Document.getElementsByTagName('a')|?{$_.href -match "`#r1r3"}
这就是门票!现在我有了一个可以使用的对象。是的,当然,有些属性是 True 或 False,但还有很多其他属性,例如 InnerHTML、InnerText、OuterHTML、OuterText...嗯,很多。另外,如果我将其通过管道传输到 |GM
,它会列出该对象的所有属性和方法...包括 Click
。
所以,我认为真正的问题是我复制并粘贴了您的代码并只是对其进行了一些修改,我实际上没有注意到 ' vs "问题。请重试:
$link = $doc.getElementsByTagName('a') | Where-Object {$_.href -match "`#r1r3"}
$Link.Click
我吸取了教训,很抱歉造成困惑。
关于Powershell - 单击 div 中的 href 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22693819/