2016-08-12 2 views
0

속성 변경을 위해 페이지를 계속 확인하는 데 문제가 있었지만 수행했습니다. 이제 내 주요 코드는 다음과 같습니다if 문 다음에 오는 작업 수행 CasperJS

casper.thenOpen('pageurl', function() { 
    this.then(function() { 
     function checkReload() 
     { 
      var cur = this.getElementAttribute("classname", "attr"); 
      if (cur == "target") {here 
       return; // finished 
      } 
      else 
      { 
       this.echo(cur); 
      } 
      this.reload(); 
      this.wait(1, checkReload); // check again in a second 
     } 
     this.then(checkReload);   
    }).thenEvaluate(function(){ 
     this.click("#new_add"); 
     this.echo("done567"); 
     this.then.waitForSelector(".cartGdList", 
      function pass() { 
       this.click("..."); 
       this.echo("done8"); 
       this.then(function() { 
        this.waitForSelector(".cart_s_Box", 
         function pass() { 
          this.click("#js_upFormBtn"); 
          this.echo("step4"); 
          var end = new Date().getTime(); 
          var time = end - start; 
          this.echo('time: ' + time + 'ms*'); 
         }, 
         function fail() { 
          this.echo('fail'); 
         } 
        ); 
       }); 
      }, 
      function fail() { 
       this.echo('fail'); 
      } 
     ); 
    }); 
}); 

그리고 문이 확인 될 경우 후 if(cur == "target") 나는이 코드를 수행 할 :이 작업을 수행 할 수 있습니다, 나는이를 넣어 시도하는 방법

this.click("#new_add"); 
this.echo("done567"); 
this.then.waitForSelector(".cartGdList", 
    function pass() { 
     this.click("..."); 
     this.echo("done8"); 
     this.then(function() { 
      this.waitForSelector(".cart_s_Box", 
       function pass() { 
        this.click("#js_upFormBtn"); 
        this.echo("step4"); 
        var end = new Date().getTime(); 
        var time = end - start; 
        this.echo('time: ' + time + 'ms*'); 
       }, 
       function fail() { 
        this.echo('fail'); 
       } 
      ); 
     }); 
    }, 
    function fail() { 
     this.echo('fail'); 
    } 
); 

thenEvaluate에 있지만 이것은 작동하지 않습니다.

답변

0

당신은 불필요한 중첩을 많이하지만 처음부터 먼저합니다. if -branch에서 일부 코드를 실행하려고합니다. 그런 다음 코드를 if -branch에 입력합니다.

들여 쓰기가 너무 많지 않은 경우 코드를 함수에 넣을 수도 있습니다.

function myIfBranch(){ 
    this.click("#new_add"); 
    this.echo("done567"); 
    // ... 
} 

casper.thenOpen('pageurl', function() { 
    this.then(function() { 
     function checkReload() 
     { 
      var cur = this.getElementAttribute("classname", "attr"); 
      if (cur == "target") { 
       myIfBranch.call(this); 
       return; // stop recursion 
      } 
      else 
      { 
       this.echo(cur); 
      } 
      this.reload(); 
      this.wait(1, checkReload); // check again in a second 
     } 
     this.then(checkReload); 
     // ... 

불필요한 중첩은. then*wait* 함수는 실제로 비동기 스텝 함수이며 둘 다 같은 비동기 방식으로 동작합니다.


function myIfBranch(){ 
    this.click("#new_add"); 
    this.echo("done567"); 
    this.waitForSelector(".cartGdList", 
     function pass() { 
      this.click("..."); 
      this.echo("done8"); 
      this.waitForSelector(".cart_s_Box", 
       function pass() { 
        this.click("#js_upFormBtn"); 
        this.echo("step4"); 
        var end = new Date().getTime(); 
        var time = end - start; 
        this.echo('time: ' + time + 'ms*'); 
       }, 
       function fail() { 
        this.echo('fail'); 
       } 
      ); 
     }, 
     function fail() { 
      this.echo('fail'); 
     } 
    ); 
} 

casper.thenOpen('pageurl', function() { 
    function checkReload() { 
     var cur = this.getElementAttribute("classname", "attr"); 
     if (cur == "target") { 
      myIfBranch.call(this); 
      return; // finished 
     } 
     else 
     { 
      this.echo(cur); 
     } 
     this.reload(); 
     this.wait(1, checkReload); // check again in a second 
    } 
    this.then(checkReload); 
this casper.evaluate의 내부 및 casper.thenEvaluate는하지만 window에, casper을 참조하지 않는다는 것을 기억하십시오 여기에 정리 예이다. 단순히 window.click, window.echo 또는 window.then 기능이 없습니다. 또한 this.then.waitForSelector(...)은 의미가 없습니다.

+0

완벽 솔루션을 제공하지만이 코드 뒤에 – kaska3er

+0

을 보내 주셔서 감사합니다. – kaska3er

+0

'this.click ("# js_upFormBtn");' 'this.echo ("step4");' 실행 기능의 표시 시간이 있지만 에코 시간이 없습니다. – kaska3er