1

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

我正在尝试单击搜索结果页面中的链接。该<a href>标签没有 id,但它包含在 a<h3 />中,它包含在 a 中<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

4

3 回答 3

3

这里需要一个 CSS 选择器和thenClick方法。像这样的东西应该工作:

casper.thenClick('#result_0 h3:first-child a');
于 2013-08-04T20:30:41.620 回答
2

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

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

Demo(打开浏览器的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 演示通过 fiddle 选项将代码放在 onload 处理程序中左边)。

于 2013-08-04T11:45:34.337 回答
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();
    }
}
于 2013-08-04T11:46:27.557 回答