选择标签ID

时间:2014-07-10 22:46:31

标签: javascript casperjs

我这里有HTML代码。

在浏览器中,我可以使用类似

的firebug获取每个id
document.querySelectorAll('section').item(0).id

这意味着如果我做一个变量

inputFields = this.evaluate(function() {
    return document.getElementsByTagName('section');
});

所以inputFields数组应该包含所有四个部分都有其id。稍后我可以使用inputFields.item(index).id访问每个部分,以指向任何部分ID。

这是我的casper脚本:

casper.then(function(){
    var inputFields = this.evaluate(function(){
        return document.getElementsByTagName('section');
    });
    require("utils").dump(inputFields.item(1).id);
});

如果我做错了,请纠正我。我收到了错误:

error: 'undefined' is not a function (evaluating 'inputFields.item(1)')
#           TypeError: 'undefined' is not a function (evaluating 'inputFields.item(1)')

我想要一个节ID的数组。

1 个答案:

答案 0 :(得分:0)

您无法从页面上下文中检索DOM元素到casper上下文中。只允许使用布尔,数字,字符串,[]{}等基本类型。 PhantomJS documentation的引用如下:

  

注意: evaluate函数的参数和返回值必须是一个简单的原始对象。经验法则:如果它可以通过JSON序列化,那么它很好。闭包,函数,DOM节点等将工作!

您需要在页面上下文中完成部分工作。就像只将元素减少为id

casper.then(function(){
    var inputFields = this.evaluate(function(){
        return Array.prototype.map.call(document.getElementsByTagName('section'), function(sectionItem){
            return sectionItem.id;
        });
    });
    require("utils").dump(inputFields[1]);
});

尽管如此,我并不认为section类型是您案例中的输入字段。您可能意味着一个部分内的输入字段。

相关问题