2014-03-27 94 views
1

中的href鏈接我確定這個答案之前一定有答案,但我想我只是不知道我應該在我的搜索術語中使用什麼。Powershell - 點擊div

我想讓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() 

...但它似乎沒有任何工作。

任何建議將不勝感激!

回答

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'} 

......並且它什麼也沒有返回。恩......跆​​拳道。哦,等等,我用單引號不用雙引號。糟糕,再次嘗試使用「#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 

課。得知我的一部分,遺憾的混亂

+0

轉義字符#使我的愚蠢,我沒有注意到更早。但仍然沒有工作。出於好奇,我拿出了「where」子句並添加了「write-host $ link」來查看是否有任何內容被填充 - 它返回了一堆真/假結果......聽起來是對的嗎?我認爲它會爲每個元素返回更多的細節,而不僅僅是真或假。有沒有辦法讓它迴應所有可用的href? – CactusCake

+0

不,這聽起來不對。給我一分鐘,我會更新我的答案,以反映我所看到的。 – TheMadTechnician

+0

仍然無法正常工作。儘管如此,我認爲您提供的代碼沒有任何問題,但我認爲這可能與我嘗試點擊該鏈接的頁面結構有關。我提供的html代碼片段僅僅是一個更大的整體文檔中的一部分源代碼,它帶有幾個嵌套div和一些iframe,所以我想我在哪裏使用$ ie.document.get--它可能不夠具體也許到了正確的嵌套部分?謝謝你的努力,我很欣賞你在答案中提供的詳細程度。 – CactusCake

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