1

一直在修补 phantomJS 并且遇到了一些我不明白的东西。我可以看到照片的数量,但只能看到第一个对象

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

知道为什么列出了唯一的第一个对象吗?

4

1 回答 1

1

正如这里所说,

评估函数的参数和返回值必须是一个简单的原始对象。经验法则:如果它可以通过 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();
})
于 2013-08-16T06:05:01.083 回答