2017-10-19 70 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定義在函數之外,你應該可以調用_page.evaluate(),而不是從open()返回值上調用它。

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(函數(){我不能打印任何東西,似乎它有任何錯誤...我試圖拋出一個錯誤,但沒有成功,任何想法爲什麼? – PRVS

+0

是的,這有點棘手 - 您在evaluate()中運行的代碼正在您正在評估的頁面的上下文中運行。關於此問題有一個很好的線索:https://stackoverflow.com/questions/ 16701208/phantomjs-page-evaluation-not-logging-on-console –

相關問題