Phantomjs CasperJS:在循环时关闭页面实例的正确方法

Phantomjs CasperJS:在循环时关闭页面实例的正确方法,phantomjs,casperjs,Phantomjs,Casperjs,我有一个长时间运行的脚本,它在几个不同的链接之间循环以执行其工作。我遇到了一个场景,在这个场景中,PhantomJS耗尽了资源,因为我正在重用它,所以页面对象没有被垃圾收集。下面我有一个简单的例子。我关闭()页面对象,并在每个循环周期结束时创建一个新的页面对象,但在关闭之后,Casper将挂起。正确的方法是什么 var links = ['http://www.google.com', 'http://www.yahoo.com']; var casper = require('casper'

我有一个长时间运行的脚本,它在几个不同的链接之间循环以执行其工作。我遇到了一个场景,在这个场景中,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
然后就挂了。我错过了什么

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是否需要您关闭页面。

也可以