我想在没有特定子节点的情况下检测DOM中的元素,然后在超时后单击没有子节点的元素。没有办法明确地直接找到元素只获取具有某个类的所有元素,并省略具有特定子类的元素。
假设浏览器有以下代码:
<div class="card">
<div></div>
<button>
</div>
<div class="card">
<div></div>
<button>
</div>
<div class="card">
<div class="dont-click"></div>
<button>
</div>
以下代码适用于casperjs / horseman,基本上使用.card
类获取所有元素,然后查找子项具有.dont-click
类的元素并省略它:
var cards = $('.card');
var listOfClickables = cards.filter(function(i, card) {
var jCard = $(card);
var found = jCard.find('.dont-click');
if (found.length <= 0) {
return jCard;
}
});
return listOfClickables;
这有效,现在我想逐个查看此列表,然后单击每个.card
的子按钮。如果您复制并粘贴到浏览器中,此代码有效:
recursiveFunction(listOfClickables);
function recursiveFunction(list){
var jCard = list.shift();
$(jCard).find('button').click();
var delayMs = Math.random() * 5;
setTimeout(function() {
recursiveFunction(list);
}, delayMs * 1000);
}
它从前一个函数中获取列表,并递归地单击子按钮,等待一下,然后弹出下一个元素,直到列表为空。
我试图点击这些项目中的一个,但我遇到了一些问题:
.evaluate()
块中完成所有操作,您无法返回jquery元素列表,然后将其传递到另一个.evaluate()
块jQuery.click('.card button')
点击元素,你必须以某种方式在.evaluate()
块之外识别它,然后使用casperjs中的.click()
方法/骑手。是否可以使用这些框架来执行类似“使用此选择器查找所有元素,然后浏览这些元素并返回没有带有.dont-click
的子元素的元素”的内容,然后单击所有返回的元素'子按钮“?