2015-01-04 6 views
2

Я хочу проверить страницу каждые x (настраиваемые) секунды в CasperJS. Если присутствует какой-либо элемент страницы, сценарий продолжит выполнение дополнительных шагов перед выходом. В противном случае он продолжает проверять каждые x секунд. Какую конструкцию кода можно использовать для этого?CasperJS проверяет страницу каждые x секунд до тех пор, пока не будет выполнено условие

Задача проверяет конкретное хранилище eBay, если существует (редко зарегистрированный) элемент. Вопрос в том, как построить цикл while, который совместим с обещаниями CasperJS. Это потребует обновления страницы.

+1

Нужно ли обновлять страницу или просто ждать появления элемента? Благодарю. – alecxe

+0

Может помочь в любом случае: http://stackoverflow.com/questions/16807212/how-to-wait-for-element-visibility-in-phantomjs – alecxe

+0

Почему бы вам не начать с того, чтобы показать нам, что вы сделали до сих пор. – Nit

ответ

4

С ступенчатых функций CasperJS»(then* и wait*) являются асинхронными и JavaScript, не имеет блокирующий sleep функцию, это легко решается с помощью рекурсии.

function check(){ 
    if (this.getHTML().indexOf('some item') !== -1) { 
     this.echo("found"); 
    } else { 
     this.wait(x*1000).thenOpen(url).then(check); 
    } 
} 

casper.start(url, check).run(); 

Другой способ заключается в использовании setInterval, но когда вы используете его, вы нарушите из потока управления CasperJS. Вам также придется не допустить выхода CasperJS. Это делается путем передачи обратного вызова в run (он может быть пустым).

casper.start(url, function(){ 
    setInterval(function(){ 
     casper.thenOpen(url, function(){ 
      if (this.getHTML().indexOf('some item') !== -1) { 
       this.echo("found"); 
       this.exit(); 
      } 
     }); 
    }, x*1000); 
}).run(function(){}); 
Смежные вопросы