2014-12-08 2 views
-1

내 현재 스크립트이 (의사 코드)처럼 보이는 내 casperjs 스크립트를 구성하는 :어떻게

casper.start(some_sample_url, function(){ 
    a_list_of_data = JSON.parse(this.getPageContent()) 

    for(var i = 0; i < a_list_of_data.length; i++){ 
     entry = a_list_of_data[i]; 
     entry_url = entry.get_url(); 
     result = __utils__.sendAJAX(entry_url, "POST", {some: "data"}, false, {some: "option"}); 
     casper.download(result, ...); 
    } 
}); 
casper.run(); 

나는 __utils__.sendAJAX가 차례로 casper.then에 있어야 할 this.evaluate에 넣어되어야한다는 것을 배웠다. 그러나 코드를 변경 한 후에는 POST 요청이 전혀 전송되지 않은 것처럼 보입니다. 누구든지 올바른 방향으로 나를 가리킬 수 있습니까?

답변

0

__utils__은 페이지 컨텍스트 (내부 : casper.evaluate)에만 정의/삽입되어 있습니다. 그래서 당신은 단순히 그것을 밖에서 사용할 수 없습니다. __utils__.sendAJAX의 세 번째 인수로 false을 전달하면 차단 호출이되므로 스크립트에서 사용할 수 있습니다. casper.download 임의로 30초 다운로드 (하드 제한) 및 데이터의 단지 몇 메가 바이트로 제한된다

for(var i = 0; i < a_list_of_data.length; i++){ 
    entry = a_list_of_data[i]; 
    entry_url = entry.get_url(); 
    result = this.evaluate(function(){ 
     return __utils__.sendAJAX(entry_url, "POST", {some: "data"}, false, {some: "option"}); 
    }); 
    casper.download(result, ...); 
} 

참고. 실제로는 뒤에서 __utils__.sendAJAX을 사용합니다.

이진 데이터를 예상하는 경우 페이지 컨텍스트에서 반환하고 캐스퍼 컨텍스트에서 디코딩하기 전에 문자열을 인코딩해야합니다.


모든 casper.then*casper.wait* 함수는 단계 큐에 추가되고 차례로 실행하는 단계를 만든다. 일부 기능은 casper.repeat, casper.start, casper.run 등과 같은 단계를 생성합니다. then 또는 onTimeout이라는 콜백 함수가 있으면 이는 단계입니다.

실행하려는 모든 코드는 적어도 하나의 단계 함수에 있어야하며 그렇지 않으면 제어 흐름 외부에서 실행됩니다. 부서진 통제 흐름을 따라 잡을 전략이 있습니다. 그러나 이것의 아무도는 여기에서 필요하지 않다.

+0

쉽게 해결할 수있는 아주 작은 예제이기 때문에 * code-organization *에 대해 묻는 이유가 확실하지 않습니다. –