一直在修补幻影,并遇到了一些我不明白的事情。我可以看到照片的数量,但只能看到第一个对象
var page = require('webpage').create(),
system = require('system'),
address = 'http://en.wikipedia.org/wiki/Tiger'
page.open(address,function(status){
page.render('page.png');
if(status=="success"){
var title = page.evaluate(function () {
return document.title;
});
console.log('Page title is ' + title);
var imgs = page.evaluate(function() {
return document.images;
});
console.log(imgs.length);
console.log(imgs[0]);
console.log(imgs[1]);
}
phantom.exit();
})
输出是:
Page title is Tiger - ....
95
[object Object]
null
知道为什么只列出第一个对象?
答案 0 :(得分:1)
如上所述here,
evaluate函数的参数和返回值必须是a 简单的原始对象。经验法则:如果可以序列化的话 通过JSON,那很好。闭包,函数,DOM节点等 不工作!
因此,在您的情况下,不要直接返回img元素,因为它不起作用。 imgs
不是图像列表,而是DOM元素列表的列表。
解决这个问题的一个非常简单的方法可能是
var page = require('webpage').create(),
system = require('system'),
address = 'http://en.wikipedia.org/wiki/Tiger'
page.open(address,function(status){
page.render('page.png');
if(status=="success"){
var title = page.evaluate(function () {
return document.title;
});
console.log('Page title is ' + title);
var imgs = page.evaluate(function() {
return [].map.call(document.querySelectorAll('img'), function (img) {
return img.getAttribute('src');
});
});
console.log(imgs.length);
console.log(imgs[0]);
console.log(imgs[1]);
}
phantom.exit();
})