我没有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
答案 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>
:
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();
}
}