为什么Phantom.js没有评估我的Backbone应用程序的工作?

page.open(My_url, function(status) { page.evaluate(function() { var html = document.documentElement.outerHTML; return html; }, function(result){ res.send(result); }); }); 

我有一个骨干应用程序。 “My_url”指向该骨干网页。

当我运行这个代码时,outerHTML不包括渲染的视图。 它只是基本的CSS /脚本/容器持有人。

这就像骨干的应用程序根本没有运行。 如何使评估()返回完全呈现的骨干应用程序(所有的Ajax调用和东西)?

毕竟,这就是Phantom.js的要点

加载后立即评估页面并不总是足够的。 有时,由于JavaScript写在页面上的方式,你将不得不等待并允许页面的JavaScript执行。 为此,我build议您在执行评估之前尝试添加一个等待。 例如

 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元素。