phantomjs-加载页面后运行render,但加载不会触发

phantomjs-加载页面后运行render,但加载不会触发,phantomjs,Phantomjs,我正试图用phantomjs创建一个图形到png的转换器,但很难让它正常工作。我看到的几乎每一个例子都使用一些外部URL,就好像你对它所做的一切都是刮取,而且文档非常缺乏 为了进行测试,我创建了一个非常简单的d3函数,其中添加了一个标记和一个蓝色圆圈。查看SO上的其他问题和示例,我将其连接到onLoadFinish,但该事件从未触发 我猜我需要打开页面,但是打开只使用了一个url,这对我来说并不相关(再说一遍,文档完全缺乏信息。即使我看到我认为可能相关的东西,我的。这是) 这是我的密码: var

我正试图用phantomjs创建一个图形到png的转换器,但很难让它正常工作。我看到的几乎每一个例子都使用一些外部URL,就好像你对它所做的一切都是刮取,而且文档非常缺乏

为了进行测试,我创建了一个非常简单的d3函数,其中添加了一个
标记和一个蓝色圆圈。查看SO上的其他问题和示例,我将其连接到onLoadFinish,但该事件从未触发

我猜我需要
打开
页面,但是
打开
只使用了一个url,这对我来说并不相关(再说一遍,文档完全缺乏信息。即使我看到我认为可能相关的东西,我的。这是)

这是我的密码:

var page = require('webpage').create(); 

var content = '<html>';
content += '<body>';
content += '<h1> test title </h1>';
content += '<div id="graph">';
content += '</div>';
content += '</body></html>';    

page.content = content; 

page.injectJs('lib/d3/d3.min.js');
page.onLoadFinish = function(status) {
    console.log('loading finished'); // this never happens!
    var svg = d3.select('#graph')
                .append('svg')
                .attr({'width': 100, 'height': 100});   

    var circle = svg
        .append('circle')
        .attr({ 'cx': 10, 'cy': 10, 'r': 10, 'fill': 'blue' });   

    page.render('test.png');
    phantom.exit();
};
var page=require('webpage').create();
var内容=“”;
内容+='';
内容+=‘测试标题’;
内容+='';
内容+='';
内容+='';
page.content=内容;
page.injectJs('lib/d3/d3.min.js');
page.onLoadFinish=功能(状态){
console.log('loading finished');//这永远不会发生!
var svg=d3。选择(“#图形”)
.append('svg')
.attr({'width':100,'height':100});
var circle=svg
.append('圆')
.attr({'cx':10,'cy':10,'r':10,'fill':'blue');
page.render('test.png');
phantom.exit();
};
有什么建议吗?

没问题。这就是我想要的功能。它“在网页上下文中评估给定函数”

最后,它起作用了:

page.content = content; 
page.injectJs('lib/d3/d3.min.js');
page.evaluate(function() {
    var svg = d3.select('#graph')
                .append('svg')
                .attr({'width': 100, 'height': 100});   

    var circle = svg
        .append('circle')
        .attr({ 'cx': 10, 'cy': 10, 'r': 10, 'fill': 'blue' });   

    page.render('test.png');
    phantom.exit();
};

我只是用交互式shell来检查注入。它不起作用。这太奇怪了,它应该返回一个布尔值-所以注入一个不存在的文件会返回
false
好吧,但是尝试一个确实存在的文件会导致
{}
。WTF这个库有问题吗??它似乎打破了所有的过度请不要使用代码标签强调或引用;代码标签用于代码(或其他逐字记录的技术资料)。@LightnessRacesinOrbit我不确定我是否同意。没有其他方法可以强调引用的文本并使其与文本的其余部分保持一致。我从来没有想过这是一个问题,因为内联代码不接收任何语法突出显示,并且看起来非常类似于任何引用的文本(除了内联)。我已经打开了一个,我想让你看看“相同但单一空间”不是“非常相似”的意思。@R.MartinhoFernandes我同意你的看法。这一点已在链接讨论中提出(我的建议是我们将
列为白名单,因此它将非常相似)