2016-10-25 3 views
2

단계로 "다음"추가하지 않습니다. 캐스퍼 JS 단계의 배열에 추가되지 않는다는 것을 의미합니다. 선택이 페이지에서 찾을 수없는 경우CasperJS waitForSelector이 같이 내 코드는 모습입니다 배열

[18] => [info] [phantom] Step _step 5/5 https://... (HTTP 200) 
[19] => [info] [phantom] Step _step 5/5: done in 3392ms. 
[20] => [info] [phantom] waitFor() finished in 40ms. 
[21] => [info] [phantom] Done 5 steps in 3451ms 

타임 아웃 스크립트가 마법처럼 작동 오기 전에 :

로그의 일부입니다.

UPD. 결과적으로 문제는 do_whilewaitFor에 있습니다.

+0

모든 코드를 게시 해주십시오. – Sayakiss

답변

0

연구의 일부 시간 후에 나는 문제가 do_whilestep.then의 수정에 있다는 것을 알았습니다. do_whilewaitFor 기능과 호환되지 않습니다.

해결 방법 (pull request)은 가장 명확하지 않지만 간단합니다. 난 그냥 특별한 방법에서 함수라는 이름의 작은 체크를 추가했습니다 :

casper.waitFor(
    function check(){ 
     // check if page is ready 
    }, 
    function successThen(){ 
     // execute after page is ready 
    }, 
    function(){ 
     // time out happened before page got ready 
    }, 
    timeOutTime 
); 

이를 :

var isWaitSuccessFun = step.name.indexOf('successThen') != -1; 
if(isWaitSuccessFun || !this.steps[this.current].executed) { 

waitFor 일이 바로 성공의 함수 이름이 예에서와 같이 successThen이 포함되어 확인하려면 또한 waitForSelector을 작동시키고 waitFor을 기반으로하는 유사한 기능을 제공합니다.

전체 코드는 내 forked repository에서 사용할 수 있습니다.