如何使用 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);
我正在尝试找到一种方法来逐个获取一些 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'.
正确的缩进可能会使问题更加明显。 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);