2013-08-04 187 views
0

我沒有在javascript中體驗過。我正在嘗試在CasperJS中使用javascript編寫函數。如何點擊沒有ID的鏈接

我在點擊搜索結果頁面上的鏈接。 <a href>標記沒有標識,但它包含在<h3 />中,該標記包含在<div id="some_id"/>中。

本質上,代碼如下所示:

<div id="result_0"> 
    <div /> 
    <div /> 
    <h3 class="..."> 
     <a href="some_link"> 
     . 
     . 
     </a> 
    </h3> 
. 
. 
</div> 

我想知道如何點擊的JavaScript鏈接。

我試圖做這樣的:

document.getElementById('result_0').getElementsByTagName('div')[2].getElementsByTagName('a')[1].click(); 

但這似乎並沒有工作。你們能幫忙嗎?

編輯:這是鏈接到我的整個腳本:https://github.com/ctrl-shift-esc/randomamazonshopper/blob/master/myscript.js

回答

2

你需要一個CSS選擇器,這裏的thenClick方法。像這樣的東西應該工作:

casper.thenClick('#result_0 h3:first-child a'); 
+0

這條線沒有工作,但此人做: 'casper.thenClick( '#RESULT_0 H3一');' –

2

中的問題顯示(如果你改變div的ID從some_idresult_0)HTML結構如下工作:

document.getElementById('result_0').getElementsByTagName('h3')[0] 
            .getElementsByTagName('a')[0].click(); 

演示(打開瀏覽器的JS控制檯):http://jsfiddle.net/kyLXT/1/

也許你的代碼在方括號中有錯誤的索引?

或者你也可以做到這一點點擊與該ID的元素內的第一H3第一個鏈接:

document.querySelector('#result_0 h3 a').click(); 

或者,如果您擔心可能沒有一個匹配的元素:

var el = document.querySelector('#result_0 h3 a'); 
if (el) 
    el.click(); 
// optionally add an else here 

請注意,無論哪種方式,代碼需要位於相關元素和/或DOM就緒或窗口onload事件處理程序之後出現的腳本塊中(以上的jsfiddle演示將代碼放入onload處理程序中左邊的小提琴選項)。

2

您可以使用DIV的ID持有<h3>

var oParentDiv = document.getElementById("some_id"); 
var arrHeaders = oParentDiv.getElementsByTagName("h3"); 
if (arrHeaders.length !== 1) { 
    alert("no header or more than one"); 
} else { 
    var oHeader = arrHeaders[0]; 
    var arrLinks = oHeader.getElementsByTagName("a"); 
    if (arrLinks .length !== 1) { 
     alert("no link or more than one"); 
    } else {  
     var oLink = arrLinks[0]; 
     oLink.click(); 
    } 
}