在PhantomJS的evalute中,属性是未定义的

我通过在页面中包含jquery来通过phantomjs获取网站的内容。 现在我必须通过程序将它们写入文件。 为此,我使用了下面的代码

page.onLoadFinished = (function(status) { if (status === 'success') { page.includeJs('http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js', function() { page.evaluate(function() { var mkdirp = require('mkdirp'); mkdirp(counter+'_folder', function(err) { var html = $('pre[data-language="html"]').html(); var js = $('pre[data-language="js"]').html(); var css = $('pre[data-language="css"]').html(); var fs = require('fs'); fs.writeFile(counter+"_folder/"+"fiddle.html", html, function(err) {}); fs.writeFile(counter+"_folder/"+"fiddle.css", css, function(err) {}); fs.writeFile(counter+"_folder/"+"fiddle.js", js, function(err) {}); console.log("******* "+counter+" *************"); }); }); }); } }); page.open(url[counter]); 

现在发生了什么是在我使用evalute方法时,要求程序正在停止那里显示错误无法findvariables的要求。 任何想法,为什么这是appering?

page.evaluate()是沙盒页面上下文。 它无法访问requirepagephantom

此外,mkdirp是一个不能与PhantomJS一起工作的节点模块。 如果你想从节点使用PhantomJS,你将不得不使用像幻影之类的桥梁。 另请参阅: 使用casperjs中的节点模块

使用该桥,你必须将variables传递到外部并从那里保存:

 page.open(url, function(){ var mkdirp = require('mkdirp'); mkdirp(counter+'_folder', function(err) { page.evaluate(function() { var html = $('pre[data-language="html"]').html(); var js = $('pre[data-language="js"]').html(); var css = $('pre[data-language="css"]').html(); return [html, js, css]; }, function(result){ var fs = require('fs'); fs.writeFile(counter+"_folder/"+"fiddle.html", stuff[0], function(err) {}); fs.writeFile(counter+"_folder/"+"fiddle.css", stuff[1], function(err) {}); fs.writeFile(counter+"_folder/"+"fiddle.js", stuff[2], function(err) {}); console.log("******* "+counter+" *************"); }); }); }); 

注意:PhantomJS的fs模块没有writeFile函数。 Node和PhantomJS有不同的执行环境。