2013-07-08 2 views
1

이 문제에 대한 해결책을 찾으려고합니다.클릭 후 업데이트 된 콘텐츠를 얻으려면 어떻게해야합니까?

  1. 열기 페이지 anche는
  2. 가 새로운 내용을 읽어 다시 새로운 링크를 얻을 결과의 두 번째 페이지를 얻기 위해 특정 링크를 링크 (매김 링크)에
  3. 클릭을 얻을 ....
  4. 당신이 볼 수 있듯이 나는 반복 내부의 두 단계를

    var page = 1; 
    
    function getLinks() {  
        var links = __utils__.getElementsByXPath('//div[@class="myDiv"]//a'); 
    
        return Array.prototype.map.call(links, function(e) { 
         return e.getAttribute('href') 
        }); 
    } 
    
    casper.start("www.example.com", function(){ 
        // 
    }) 
    
    casper.repeat(2, function() { 
    
        this.then(function(){ 
         links = this.evaluate(getLinks); 
         links = links.concat(links);  
        }); 
    
        this.then(function(){ 
         page++;  
         this.clickLabel(String(page), 'a'); 
        }); 
    
    }); 
    

    :

이 내 casperjs 응용 프로그램의 일부입니다. 두 페이지 만 확인하면되므로 2를 설정했습니다.

현재 내 문제는 "클릭"입니다. 새 URL이 호출 되었기 때문에 작동하지만 문제는 첫 번째 단계가 즉시 실행되어 새 내용이 완전히로드되지 않는다는 것입니다. 그래서 getLinks()를 다시 호출 할 때 나는 여전히 이전 내용을 작업한다.

분명히 페이지가 완전히로드되면 getLinks하고 싶습니다. 내가 어떻게 해 ?

감사합니다.

답변

-1

FAQ 가상 브라우저가 페이지에서 클릭이나 다른 JavaScript 작업 결과를로드하거나 렌더링 할 수 있도록 일부 코드를 지연시키는 방법은 무엇입니까?

window.setTimeout(
    function() { 
     // process page here 
    }, 
    2000 // number of milliseconds to wait (here 2s) 
); 

아주 쉽게, 그것을하지 않습니다! 당신이하고자 귀하의 경우 :

do_click(); 
window.setTimeout(
    function() { process_click_result(); }, 
    2000 // 2 seconds 
); 
+0

'setTimeout'는이 시나리오에 적용되지 않습니다 : 나는 페이지 번호가 page=x로 URL의 내부에 있다고 가정한다. –

0

는이 같은 링크를 검색하기 전에 wait 앞에 추가 수 :

casper.repeat(2, function() { 
    this.wait(2000); // 2 seconds 

    this.then(function(){ 
     links = this.evaluate(getLinks); 
     links = links.concat(links);  
    }); 

    this.then(function(){ 
     page++; 
     this.clickLabel(String(page), 'a'); 
    }); 

}); 

또한 페이지가로드되어 있는지 확인 클릭 후 waitForResource를 추가 할 수있다. 심지어는 제한 시간이 밖으로 실행하기 전에 캐스퍼 그냥 예약 된 다음 단계 종료를 실행하기 때문에

casper.repeat(2, function() { 
    this.then(function(){ 
     links = this.evaluate(getLinks); 
     links = links.concat(links);  
    }); 

    this.then(function(){ 
     page++; 
     this.clickLabel(String(page), 'a'); 
    }); 

    this.waitForResource(new RegExp("page="+page)); 
}); 
관련 문제