2013-11-21 26 views
0

我有一個嵌套casper.repeatcasper.repeat循環。我需要從內部逃脫,並繼續從第一個casper.start()。重複(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'不能解決問題。如果你建議*轉到*,那麼你還應該提供示例代碼。 –