当javascriptEnabled为真时,phantomjs渲染页面两次以上抛出错误

时间:2016-04-09 13:45:04

标签: javascript node.js phantomjs

我将在nodejs子进程(spawn)中运行phantomjs来渲染网页到图片。但是当我设置page.setting.javascriptEnabled = true并渲染页面超过三次(第一次和第二次是正确的)时,它将抛出错误。如果设置javascriptEnabled = false,它运行良好。
this is log in iterm

代码:

var webpage = require('webpage');
var write = require('system').stdout.write;
var configMod = require('./config');
var config = configMod.get();
var args = require('system').args;
var phantomId = args[1];

function doJob(job) {

    var page = webpage.create();
    var jobId = job.id;
    var url = job.url;
    var viewportSize = job.viewportSize || config.viewportSize;
    var clipRect = job.clipRect || config.clipRect;
    var zoomFactor = job.zoomFactor || config.zoomFactor;
    var imagePath = job.imagePath;

    viewportSize && (page.viewportSize = viewportSize);
    clipRect && (page.clipRect = clipRect);
    zoomFactor && (page.zoomFactor = zoomFactor);
    page.settings = {
        javascriptEnabled: true,
        loadImages: true,
        resourceTimeout: 3000,
        userAgent: 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.31 (KHTML, like Gecko) PhantomJS/2.1.0'
    };

    page.open(url, function (status) {
        write(url + ':' + status)
        var data;
        var fetchObj;
        if (status === 'fail') {
            data = {
                JOBID: jobId,
                url: url,
                phantomId: phantomId,
                status: false
            };
            // release the memory
            page.close();
            // send data to NodeJS
            write('{{begin}}' + JSON.stringify(data) + '{{end}}');
        } else if (status === 'success') {
                page.render(imagePath, {quality: job.quality});

                data = {
                    JOBID: jobId,
                    url: url,
                    phantomId: phantomId,
                    image: imagePath,
                    status: true
                };
                // release the memory
                page.close();
                // send data to NodeJS
                write('{{begin}}' + JSON.stringify(data) + '{{end}}');                  

        }
    });
}

0 个答案:

没有答案