我遇到麻烦点击每个循环中的项目(在CasperJS中)这里是代码的一小部分:
$("#id1",html).each(function( index ) {/*loop-start*/
var job = {};/*init*/
casperjs.click(".class2");
boo.waitForSelector('selector3', function() {
job.url = casperjs.getCurrentUrl();
page.pagejobs.push(job);
casperjs.back();
casperjs.waitForSelector('selector4', function() {
},function(){
}, 6000);
},function(){
}, 10000);
});/*loop-end*/
基本上我点击一个按钮(casper.click(".class2")
),这没问题。第一次它工作正常'因为它用选择器(.class2)单击第一个按钮但问题是有许多选择器具有与那个相同的类(它们是(#id1)的子)。
所以它类似于:
<div id="id1">
<div class="anything">
<a button class="class2"> </a>
</div>
<div class="anything">
<a button class="class2"> </a>
</div>
</div>
所以我认为casper.click(".class2")
是我的问题。我需要一种方法来在each
函数的每次迭代中选择当前按钮。请注意,我无法使用$(this)
。
答案 0 :(得分:0)
CSS选择器提供:nth-child()
伪类,您可以使用它来根据索引选择子元素。只有.anything
个元素是#selector1goeshere
的子元素时才会按预期工作。
您可以使用
casper.click("#id1 > :nth-child("+(index+1)+") > a.class2");
您也可以使用XPath表达式执行此操作,但不限制只有.anything
个孩子的限制。例如:
var x = require("casper").selectXPath;
...
casper.click(x("//*[@id='id1']/*[contains(@class,'anything')]["+(index+1)+"]/a[contains(@class,'class2')]"));