我通过将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方法内部发生的事情要求程序停止显示错误无法找到变量require。知道为什么会出现这种情况吗?
答案 0 :(得分:1)
page.evaluate()
是沙盒页面上下文。它无法访问require
,page
,phantom
...
此外,mkdirp是一个不能与PhantomJS一起使用的节点模块。如果要从节点使用PhantomJS,则必须使用phantom之类的桥接器。另见:Use a node module from casperjs
使用该桥接器,您必须将变量传递到外部并从那里保存:
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具有不同的执行环境。