当网址没有退出时,casper.open(...)会发出问题

时间:2014-12-30 02:05:19

标签: javascript phantomjs casperjs

我想让一个示例脚本允许检查url列表(从csv文件传递)。 Foreach urls,如果url返回错误(404,500 ...),脚本将返回。

所以,经过多次尝试,我差不多这样做但是......我注意到当URL没有退出时(例如http://akljdlkzjlkadz.jhjkhkajzhd),我的casper.open没时间得到错误( 500)在下一个casperjs步骤之前#then'开始。我的意思是:

这是我的函数,包含两个casperjs步骤;

function check(line){
  this.then(function(){ //step one
    url = line.split("|");
    this.echo("TEST0 : "+url[0]);
    this.open(url[0]);
  });

  this.then( function (){ //step two
    if (this.currentHTTPStatus === 404){
      this.warn("Error 404");
    }else if (this.currentHTTPStatus === 500){
      this.warn("Error 500");
    }else{
      this.echo("TEST1 : "+url[0]);
      this.echo("TEST2 : "+this.getCurrentUrl());
      this.echo("Link OK !");
    }
  });

}

通过几个this.echo(..),我的终端显示:

TEST0 : http://www.google.com 
TEST1 : http://www.google.com
TEST2 : http://www.google.com
LINK OK!
TEST0 : http://www.google.es
TEST1 : http://www.google.es
TEST2 : http://www.google.es
LINK OK!
TEST0 : http://www.google.azerty
TEST1 : http://www.google.azerty
TEST2 : http://www.google.es <----- getCurrentUrl() doesn't return http://www.google.azerty, has no time because this url doesn't exist?
LINK OK!

我尝试了几种方法来解决这个问题。但是我没有找到并理解为什么第二个然后开始,而第一个。然后我就没有完成。

casperjs version : 1.1.0-beta3
phantomjs version : 1.9.7
nodejs version : v0.10.25

我脚本的完整代码;

var casper = require("casper").create({
  pageSettings: {
    loadImages: false,
    loadPlugins: false
  }
});
var fs = require('fs');
var csv = casper.cli.get(0);
var url;

function check(line){
  this.then(function(){
    url = line.split("|");
    this.echo("TEST0 : "+url[0]);
    this.open(url[0]);
  });

  this.then( function (){
    if (this.currentHTTPStatus === 404){
      this.warn("Error 404");
    }else if (this.currentHTTPStatus === 500){
      this.warn("Error 500");
    }else{
      this.echo("TEST1 : "+url[0]);
      this.echo("TEST2 : "+this.getCurrentUrl());
      this.echo("Link OK !");
    }
  });

}

function main(){
  this.then(function(){
    var stream = fs.open(csv, 'r');
    var line = stream.readLine();
    line = stream.readLine();
    while(line){
      check.call(this, line);
      line = stream.readLine();
    }
  });
}

casper.start().then(main).run();

0 个答案:

没有答案