2017-01-31 11 views
1

Что-то вроде этого показалось мне довольно логичным, но вызвало фантом для wtfcrash (вот что он вызывается в журнале, но не дает полезной информации) ...CasperJS/PhantomJS. Then in do/while Loop не работает

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

Если вы хотите сделать какое-то время с тем это Медленно Много внутри и точкой останова вам все равно придется использовать рекурсивную функцию, насколько я знаю. Вот пример:

... 
    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 -loop – xendi