从casperjs中的内部重复循环中逃脱

时间:2013-11-21 12:12:04

标签: javascript loops phantomjs repeat casperjs

我在 casper.repeat 循环中有一个嵌套的 casper.repeat 。我需要从内部逃脱并继续从第一个 casper.start()。重复(500 ... 当一个元素出现时...我刮了我传递页面的网站,并在其中一个页面中(我不确切知道哪一个元素可以出现,我需要打破这个循环并从起点继续。 这是我的代码:

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;
}

1 个答案:

答案 0 :(得分: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 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();
});

这有意义吗?