Javascript 为什么phantomjs代码没有';不能通过数组吗?
运行此代码后,他用第一页的源代码(“”)保存了无限多的文件,为什么他不浏览其他链接,也不停止Javascript 为什么phantomjs代码没有';不能通过数组吗?,javascript,url,phantomjs,ubuntu-14.04,Javascript,Url,Phantomjs,Ubuntu 14.04,运行此代码后,他用第一页的源代码(“”)保存了无限多的文件,为什么他不浏览其他链接,也不停止 var args = ["http://site1.com", "http://site2.com", "http://site3.com"]; var fs = require('fs'); var i = 0; function handle_page(file){ page.open(file,function(){ page.evaluate(function(){
var args = ["http://site1.com", "http://site2.com", "http://site3.com"];
var fs = require('fs');
var i = 0;
function handle_page(file){
page.open(file,function(){
page.evaluate(function(){
fs.write(i + '.html', page.content, 'w');
});
setTimeout(next_page,100);
});
}
function next_page(){
var file = args.shift();
if(!file){ phantom.exit(0); }
i++
handle_page(file);
}
next_page();
page.evaluate()
是PhantomJS中的沙盒页面上下文。它无法访问外部定义的任何变量。因此,您不能在其中引用fs
或page
,也不需要,因为page.content
在外部上下文中可用:
page.open(file,function(){
fs.write(i + '.html', page.content, 'w');
setTimeout(next_page,100);
});
剩下的代码看起来不错。此处显示的代码无法生成任何文件,因为
fs.write()
位于page.evaluate()
内,这将不起作用。请显示您的实际代码。实际上,此代码无法生成任何文件的原因是数组正在移位,因此下一项始终位于[0]
Artjom B:此代码生成相同的结果,无论有无页面。evaluate()Tim:当它移位第一项时,该项将被删除并返回,在下一次迭代中,将从array@Tim是的,这可能是预期的行为。这有什么问题?啊,是的,对不起。我假设args是通过[I]
访问的,但显然我看起来不太合适。我上面提到过,我试过了。它还会生成无限多的文件,每个文件的名称都是1..(infinite).html,其中包含我看到的第一个URL的源代码。请注册到、、事件。可能有错误。我试过你的代码,对我来说也很有效,我不明白你用的是什么PhantomJS版本,你在上面的事件处理程序中发现了任何错误吗?版本1.9.8,我从你的链接开始了代码(如果你是这么说的),它没有显示任何内容