0

私は以下のようにcasperjsコードを持っています:

var links = [
    { url : "http://engadget.com/" , name : "eng" },
    {url : "http://shoryuken.com/2013/02/01/help-save-super-arcade/",name: "shir"},
    {url: "http://theverge.com/",name:"thever" }
];

var eng_done = false , shir_done=false, thever_done=false;
var casper = require('casper');
for(i=0;i<links.length;i++){
    var url = links[i].url;
    var name = links[i].name;
    var instance_i = casper.create();
    instance_i.start(url,function(){
        console.log("Loading: "+ name);
        name_done = true;

    });
    instance_i.run(function(){

        exit(i);
    });

}


function exit(idz){

        console.log("Now exiting instance no => "+idz);
        if(eng_done & shir_done & thever_done){
            idz.exit();
        }

}

3 つの casperjs インスタンスを開始して一度に終了していることがはっきりとわかるように、exit(i) が常に 3 に固執するため、インスタンスを適切に終了できません。ここで何が間違っているのかわかりません。 ... (URL はサンプルです)。

4

1 に答える 1

0

だから私は最終的に私の質問への答えを見つけて、ここに投稿して、いつかそこに誰かを助けるかもしれません:)

var view_width = 1024, view_height = 768;
var clip_width = 1366, clip_height = 768;
var settings = {
pageSettings : {
    loadImages : true,
    loadPlugins : false
}   ,
 timeout : 120000,
 // // Set the viewport size
 viewportSize: {width: view_width, height: view_height},
 // // Set the position and the size of the clipped image
 clipRect: { 
  top: 0, 
  left: (view_width - clip_width)/2, 
  width: clip_width, 
  height: clip_height 
 },verbose: true, logLevel: 'debug'
};
var links = [
    { url : "http://google.com" , name : "google" },
    {url : "http://bing.com",name: "bing"},
    {url: "http://facebook.com/",name:"facebook" }
];
var casper = require('casper');

currentLink = 0;
for (var i=0, item; item=links[i]; i++) {
  // item is "some", then "example", then "array"
  // i is the index of item in the array
  var name = item.name;
 var instance_i = casper.create({logLevel : "debug",
 verbose : true});
 captureTheImage(instance_i,item.url,item.name,i);

}

function captureTheImage(i,u,n,e){
    var google_done=false,
    bing_done=false,
    facebook_done=false;
    i.start(u,function(){
    // item.name_done = true;
    this.capture("c:/name_"+e+"_"+n+".jpg",undefined,{
            format: 'jpg',
        quality: 75
        });
     n_done = true; 
    });
    i.clear();
    i.run(function(){

    console.log("Links done : "+currentLink);
    currentLink++;
    if(currentLink == 3){
        this.exit();
    }

    });     

}

それが誰かを助けることを願っています:)

また、さらにリンクを追加する場合は、その値を captureTheImage に渡し、 if(currentLink==) と記載されている場所で、 for ループのように links.length を使用して現在の配列の長さを定義できます。;)

一番

于 2013-11-01T12:02:46.237 に答える