2013-08-08 5 views
4

PhantomJS를 테스트하고 angel.co에 나열된 모든 신생 업체를 반환하려고합니다. PhantomJS를 사용하기로 결정한 것은 맨 아래의 "다음"을 클릭하여 첫 페이지를 매김 처리해야하기 때문입니다. 지금이 코드는 결과를 반환하지 않습니다. 필자는 PhantomJS에 완전히 익숙하지 않았으며 모든 코드 예제를 읽었으므로 모든 지침을 매우 높이 평가할 수 있습니다.PhantomJS가 결과를 반환하지 않습니다.

var page = require('webpage').create(); 
page.open('https://angel.co/startups', function(status) { 
if (status !== 'success') { 
    console.log('Unable to access network'); 
} else { 
    page.evaluate(function() { 
     var list = document.querySelectorAll('div.resume'); 
     for (var i = 0; i < list.length; i++){ 
      console.log((i + 1) + ":" + list[i].innerText); 
     } 
    }); 
} 
phantom.exit(); 
}); 

답변

17

기본적으로 페이지 평가 콘솔 메시지는 PhantomJS 콘솔에 표시되지 않습니다.

page.evaluate(...) 아래에서 코드를 실행하면 해당 코드가 페이지의 컨텍스트에서 실행됩니다. 따라서 console.log((i + 1) + ":" + list[i].innerText);이 있으면 PhantomJS가 아닌 헤드리스 브라우저 자체에 로그인됩니다. 당신이 PhantomJS 자체에 전달되는 모든 콘솔 메시지를 원하는 경우

는 페이지를 연 후 다음 사용

page.onConsoleMessage = function (msg) { console.log(msg); }; 

page.onConsoleMessage이 트리거는 페이지 내에서 콘솔로 인쇄 할 때마다. 이 콜백을 사용하면 PhantomJS에게 메시지를 자체 표준 출력 스트림에 표시하도록 요청합니다. 참조, 최종 코드의 모습에 대한

(나를 위해 성공적으로 인쇄) :

var page = require('webpage').create(); 

page.open('https://angel.co/startups', function(status) { 
    page.onConsoleMessage = function (msg) { console.log(msg); }; 
    if (status !== 'success') { 
     console.log('Unable to access network'); 
    } else { 
     page.evaluate(function() { 
      var list = document.querySelectorAll('div.resume'); 
      for (var i = 0; i < list.length; i++){ 
       console.log((i + 1) + ":" + list[i].innerText); 
      } 
     }); 
    } 
    phantom.exit(); 
}); 
+0

보너스 명성 포인트 당신은 ... 나는 casper.page에 액세스 할 수 있습니다 CasperJS이 작업을 수행하는 방법을 보여 할 수있는 경우 하지만 onConsoleMessage 옵션은 없습니다. – DynamicDan

+0

결코 신경 쓰지 마세요. http://casperjs.readthedocs.org/en/latest/debugging.html – DynamicDan

관련 문제