2017-01-31 14 views
1

このようなものは、私にはかなり論理的だが、wtfcrashにファントムを引き起こした(それはログで呼び出されたものだが、役に立つ情報を与えない)...CasperJS/PhantomJS。do/whileループが動作しない

do { 
    casper.then(function() { 
     var targetFound = false; 
     links = this.evaluate(getLinks); 

     var searchResultsAr = []; 
     for (var link in links) { 
      searchResultsAr.push(links[link].replace('/url?q=', '').split('&sa=U')[0]); 
     } 

     for (var result in searchResultsAr) { 
      if (searchResultsAr[result] == target) { 
       targetFound = true; 
       casper.echo(targetFound); 
       break; 
      } 
     } 
     if(targetFound) 
     { 
      break; 
     } 
    }); 
}while(!targetFound); 

答えて

1

異なるpossibiliesはあなただけのものに静的回繰り返したい場合は、(casper.repeatを使用することができ、あります) - >how to have a variable value for casper.repeat

あなたはmultipeでしばらくをしたい場合は、内部のだとブレークポイント私は知っている限り、あなたはまだ再帰関数を使用する必要があります。ここに例があります:

... 
    casper.then(function() { 
    loopValidConf.call(this, 0, 15); 
    }); 
    casper.then(function() { 
    casper.test.assert(exists, 'true after 15 tries!') 
    }); 

    function loopValidConf(index, numTimes) { 
    if (exists === true || index >= numTimes) { 
     return; 
    } 
    casper.then(function() { 
     casper.reload(function() { 
     casper.echo("reset values"); 
     }); 
     casper.then(function() { 
     // set some values here 
     }); 
     casper.then(function() { 
     casper.waitForSelector(".selector") 
     }); 
     casper.then(function() { 
     if (casper.exists('.targetSelector')) { 
      exists = true; 
      casper.echo('targetSelector exists!'); 
     } else { 
      casper.echo('targetSelector doesnt exists, try it once more!'); 
     } 
     }); 
    }); 
    casper.then(function() { 
     loopValidConf.call(this, index + 1, numTimes); 
    }); 
    } 
    ... 

これはまだ最適ではありませんが(メモリの問題を引き起こす可能性があります)、動作します。 :)

+0

私はまた、誰かがここを見て来る場合に備えて、これをそこに置いておきたいと思っています。(スタック質問です):http://stackoverflow.com/questions/14250151/casperjs-clicking-links-in-a-nested -ループ – xendi

関連する問題