Powershell - 单击div中的href链接

时间:2014-03-27 16:37:01

标签: powershell hyperlink click

我确定之前必须已经回答过,但我想我不知道我应该在搜索术语中使用什么。

我试图让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() 

......但似乎没有任何效果。

任何建议都会非常感谢!

2 个答案:

答案 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()