page.open(My_url, function(status) {
page.evaluate(function() {
var html = document.documentElement.outerHTML;
return html;
}, function(result){
res.send(result);
});
});
我有一个Backbone应用程序。 “My_url”指向该主干页面。
当我运行此代码时,outerHTML不包含渲染的视图。它只有基本的css / scripts /容器持有者。
就像Backbone应用程序根本没有运行一样。如何让evaluate()返回完全渲染的Backbone应用程序(在所有ajax调用和东西之后)?
毕竟,这就是Phantom.js的重点
答案 0 :(得分:6)
加载后立即评估页面并不足够。有时,由于JavaScript在页面上的编写方式,您必须等待并允许页面的JavaScript执行。为此,我建议您在执行评估之前尝试添加等待。 e.g。
function ( status ) {
if ( status === 'fail' ) {
phantom.exit( 1 );
return; // essential, if you don't, below will be executed
}
window.setTimeout(
function () {
var result = page.evaluate(
function () {
var html = document.documentElement.outerHTML;
return html;
}
);
res.send( result );
},
1000 // wait 1,000ms (1s)
);
}
如果您发现有必要等待,那么您可能需要等待某事。为此,在Internet上查找waitFor
或类似功能,允许您的脚本连续轮询,直到出现特定的DOM元素。