我这里有HTML代码。
在浏览器中,我可以使用类似
的firebug获取每个iddocument.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的数组。
答案 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
类型是您案例中的输入字段。您可能意味着一个部分内的输入字段。