2013-11-21 2 views
0

중첩 된 하나가 있습니다 casper.repeatcasper.repeat 루프 루프. 그리고 내면에서 벗어나 처음부터 계속해야합니다. casper.start(). repeat (500 ... ... 한 요소가 나타날 때 .. 나는 페이지를 통과하고이 페이지 중 하나에서 사이트를 긁어냅니다.) 하나 개의 요소가 나타날 수 있으며, 나는이 루프를 중단하고 시작 지점에서 계속해야 할 는 잘 내 코드입니다.casperjs의 내부 반복 루프에서 탈출

casper.start().repeat(500, function() { 

if(counter==11) { 
    page_counter++; 
    counter=0; 
} 

casper.open('http://my.ya.ru/clubs_rating.xml?p=' + page_counter); 

var links = this.getElementsInfo('dl.info dt a'); 
this.echo('Opened page: ' + this.getCurrentUrl()); 

casper.repeat(40, function() { 

//here i need make **waitFor** to check element every time//////// 
//and if it's here - break loop and go to start point///////////// 

if(innercounter==19) { 
    ipagecounter=ipagecounter+20; 
    innercounter=0; 
} 
+0

에서 답변보기 http://stackoverflow.com/a/27360109/581414 – Ruskin

답변

0

시도 :

casper.waitForSelector('#your_selector_id', function() { 
    test.assertExists('#your_selector_id', "We've find this element\^_^/!"); 
}, function() { 
    this.echo('Wasn't found in 10 seconds!'); 
}, 10000); 

또는 https://github.com/yotsumoto/casperjs-goto 고토보고가있다 슬픔의 평화,하지만 나는 유용 할거라 믿는다.

casper.start(); 
casper.repeat(500, function() { 
    casper.open('http://my.ya.ru/clubs_rating.xml?p=' + page_counter); 

    casper.label("LABER_FOR_BREAK"); 

    var counter=0; 
    casper.label("LOOP_START"); 

    casper.then(function(){ 
     //check selector 
     if(/*true selector assertion*/){ 
      this.goto("LABEL_FOR_BREAK"); 
     }; 
    }); 

    casper.then(function() { 
     counter++; 
     this.echo(counter); 
    }); 

    casper.then(function() { 
     if(counter<41){ this.goto("LOOP_START"); } 
    }); 
}); 

casper.run(function() { 
    this.dumpSteps(true); 
    this.exit(); 
}); 

의미가 있습니까?

+0

간단한 'waitForSelector'는 문제를 해결하지 못합니다. * Goto *를 제안하면 샘플 코드도 제공해야합니다. –