我有一个长时间运行的脚本,它遍历几个不同的链接来执行其工作。我遇到了PhantomJS资源耗尽的情况,因为我正在重复使用,因为页面对象没有被垃圾回收。我在下面有一个简单的例子。我关闭()页面对象并在每个循环周期结束时创建一个新对象,但在我这样做之后,Casper就会挂起。这样做的正确方法是什么?
var links = ['http://www.google.com', 'http://www.yahoo.com'];
var casper = require('casper').create({
logging: 'error',
pageSettings: {
webSecurityEnabled: false
}
});
casper.start('http://www.amazon.com', function () {
this.echo(this.getTitle());
});
casper.eachThen(links, function(item) {
var url = item.data;
this.open(url).then(function (){
this.echo(this.getTitle());
}).then(function (){
casper.page.close();
casper.page = require('webpage').create();
});
});
casper.run(function (){
this.echo('Done');
});
这将输出
Amazon.com: Online Shopping for Electronics, Apparel, Computers, Books, DVDs & more
Google
然后挂起。我错过了什么?
答案 0 :(得分:1)
var casper = require('casper').create();
var urls = ['http://google.com/', 'http://yahoo.com/'];
casper.start().eachThen(urls, function(response) {
this.thenOpen(response.data, function(response) {
this.echo('\n'+this.getTitle());
});
});
casper.run(function(){
this.die('\n'+'Done');
});
这对我有用。它来自文档...我不确定casperjs是否要求你关闭页面。