我正在尝试找到一种方法来逐个获取一些id并为每个人做一些修改:
上面的id列表没有固定,所以我可以没有或最多。 15!
我开始使用重复,但是我有一个问题来获取下一个(我总是拿到第一个)。我假设因为我不能在xp中使用变量count:
casper.then(function() {
var numTimes = 6, count = 0;
casper.repeat(numTimes, function(count) {
var name = this.evaluate(function(count) {
var xp = '//*[contains(@id, "connectedToNeType[' + count + ']")]'
var element = __utils__.getElementByXPath(xp).getAttribute('id');
return element;
});
this.echo(JSON.stringify(name));
}, ++count);
});
每个tr id都有以下代码:
我最终的目标是获取复选框ID并选择/取消选择。 一旦我得到正确的id名称,这部分应该很容易!
BTW,我也尝试使用getElementByXPath
搜索包含文字'ABC_'的文字,因为每个文字都有'ABC_xxx'的标题3.
答案 0 :(得分:1)
正确的缩进可能会使问题更加明显。 casper.repeat()
有两个参数,但不是三个。第三个参数应该传递给casper.evaluate()
,因此count
总是undefined
,这意味着由于某种原因第一个元素匹配。
casper.then(function() {
var numTimes = 6,
count = 0;
casper.repeat(numTimes, function() {
var name = this.evaluate(function(count) {
var xp = '//*[contains(@id, "connectedToNeType[' + count + ']")]'
var element = __utils__.getElementByXPath(xp).getAttribute('id');
return element;
}, ++count);
this.echo(JSON.stringify(name));
});
});
另外,你不需要XPath来做到这一点。 CSS选择器支持属性选择器:
var name = this.evaluate(function(count) {
var sel = '[id*="connectedToNeType[' + count + ']"]';
var element = document.querySelector(sel).id;
return element;
}, ++count);