Javascript document.images创建仅第一个元素有效的列表

Javascript document.images创建仅第一个元素有效的列表,javascript,html,phantomjs,Javascript,Html,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=="

一直在修补幻影,遇到了一些我不理解的东西。我可以看到照片的数量,但只能看到第一个对象

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
知道为什么只列出第一个对象吗?

如前所述

参数和evaluate函数的返回值必须是 简单的基本对象。经验法则:如果可以序列化 通过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();
})
如前所述

参数和evaluate函数的返回值必须是 简单的基本对象。经验法则:如果可以序列化 通过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();
})
执行
console.dir(imgs)
console.log(JSON.stringify(imgs,null,2))
以更好地理解实际值。执行
console.dir(imgs)
console.log(JSON.stringify(imgs,null,2))
以更好地理解实际值。