2017-10-19 5 views
0
var phantom = require('phantom'); 

phantom.create() 
     .then(function (ph) { 
      _ph = ph; 
      return ph.createPage(); 
     }) 
     .then(function(page) { 
      _page = page; 
      url = "http://www.aeiou.pt"; 
      return page.open(url); 
     }) 
     .then(function(page) { 

     console.log("hello3"); 
      page.evaluate(function() { 

내 코드는 다음과 같이 시작합니다. 을 console.log "hello3은"인쇄하지만, 그것은 나에게 오류가 있습니다 : 그것은이 상황에서 어떻게 왜PhantomJS - page.evaluate가 함수가 아닙니다.

TypeError: page.evaluate is not a function at /home/someone/server123.js:58:11 at at process._tickCallback (internal/process/next_tick.js:188:7)

를?

노드 버전 : v8.6.0

NPM 버전 : 5.3.0

팬텀 버전 : [email protected]

답변

2

당신이 겪고있는 문제는 page.open() 페이지를 반환하지 않는다는 것입니다 - - 상태를 반환합니다. 따라서 다음에 then()으로 전달되는 값은 해당 상태를 평가하려고하는 상태입니다. 이것은 물론 작동하지 않습니다.

가이를 처리하는 방법은 자신의 example은 각 then() 내에서 액세스 할 수있는 then() 체인 외부 페이지 변수가 있습니다. _page = page;으로 거의 수행하고 있습니다. _page이 함수 외부에 정의 된 경우 open()의 반환 값으로 호출하는 대신 _page.evaluate()을 호출 할 수 있어야합니다.

var phantom = require('phantom'); 
var _page; 

phantom.create() 
    .then(function (ph) { 
     _ph = ph; 
     return ph.createPage(); 
    }) 
    .then(function(page) { 
     _page = page; 
     url = "http://www.aeiou.pt"; 
     return page.open(url); 
    }) 
    .then(function(status) { 
     // check status for errors here 
     console.log("hello3"); 
     _page.evaluate(function() { 
+0

예, 그게 전부입니다! 감사! – PRVS

+0

내 질문은 해결되었지만 지금은 _page.evaluate (function() {안에는 아무 것도 인쇄 할 수 없으며 오류가있는 것 같습니다 ... 오류가 발생했지만 성공하지 못했습니다. 어떤 이유일까요? – PRVS

+0

그래, 조금 까다 롭습니다.'evaluate()'에서 실행하는 코드가 평가중인 페이지의 컨텍스트에서 실행되고 있습니다. 여기에 좋은 스레드가 있습니다 : https://stackoverflow.com/questions/ 16701208/phantomjs-page-not-logged-on-console –