如何使用 CasperJS 循环并找到所有 tr id

How to loop with CasperJS and find all tr id's

我正在尝试找到一种方法来逐个获取一些 id,并为每个 id 做一些修改:

上面的 id 列表不是固定的,所以我可能有 none 或最大值。 15!

我开始使用 repeat,但我在获取下一个时遇到了问题(我总是获取第一个)。我假设是因为我不能在 xp:

中使用变量计数
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 和 select/un-select。 一旦我得到正确的 id 名称,这部分应该很容易!

顺便说一句,我也尝试过使用 getElementByXPath 搜索包含文本 'ABC_' 的文本,因为每个文本都有一个带有 'ABC_xxx'.

的 title3

正确的缩进可能会使问题更加明显。 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);