如何点击没有ID的链接

时间:2013-08-04 11:39:56

标签: javascript casperjs

我没有javascript经验。我正在尝试在CasperJS中编写一个使用javascript的函数。

我正在尝试点击搜索结果页面中的链接。 <a href>标记没有ID,但它包含在<h3 />中,<div id="some_id"/>包含在<div id="result_0"> <div /> <div /> <h3 class="..."> <a href="some_link"> . . </a> </h3> . . </div> 中。

基本上代码如下:

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

我想知道如何在javascript中点击该链接。

我尝试这样做:

{{1}}

但这似乎不起作用。你们能帮忙吗?

编辑:以下是我整个脚本的链接:https://github.com/ctrl-shift-esc/randomamazonshopper/blob/master/myscript.js

3 个答案:

答案 0 :(得分:3)

您需要一个CSS选择器和thenClick方法。这样的事情应该有效:

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

答案 1 :(得分:2)

以下适用于问题中显示的html结构(如果您将div的ID从some_id更改为result_0):

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

演示(打开浏览器的JS控制台):http://jsfiddle.net/kyLXT/1/

也许你的代码在方括号中有错误的索引?

或者你可以这样做来点击元素中第一个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 ready或window onload事件处理程序之后的脚本块中(上面的jsfiddle演示程序通过以下方式将代码放入onload处理程序中)左边的小提琴选项。)

答案 2 :(得分:2)

您可以使用包含<h3>

的div的ID
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();
    }
}