2017-09-14 90 views
1

我的目標是使用Node.js從網站上刮取一些數據。PhantomJS錯誤:UnhandledPromiseRejectionWarning

我已經設法只使用request包抓取數據,但我想抓取的網站有動態內容,而且request只能抓住這個動態數據。

所以我做了一些研究,結果發現,要實現這一目標,總部設在this SO question,我需要通過安裝一些軟件包npm我不知道,如果這三個都需要):

基於這個問題也一樣,我使用相同的代碼,只是爲了瞭解它是如何工作:

myFile.js

var phantom = require('phantom'); 

phantom.create(function (ph) { 
    ph.createPage(function (page) { 
    var url = "http://www.bdtong.co.kr/index.php?c_category=C02"; 
    page.open(url, function() { 
     page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() { 
     page.evaluate(function() { 
      $('.listMain > li').each(function() { 
      console.log($(this).find('a').attr('href')); 
      }); 
     }, function(){ 
      ph.exit() 
     }); 
     }); 
    }); 
    }); 
}); 

但是,當我嘗試在終端$ node myFile.js運行,它不工作和不斷給我的錯誤:

(node:6576) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: Unexpected type of parameters. Expecting args to be array.

(node:6576) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

任何想法如何解決這個問題?

編輯:

最終解決方案基於@Shyam答案(解決)中的錯誤和this example

var phantom = require('phantom'); 
var _ph, _page, _outObj; 

phantom 
    .create() 
    .then(ph => { 
    _ph = ph; 
    return _ph.createPage(); 
    }) 
    .then(page => { 
    _page = page; 
    return _page.open('https:/www.google.com.br/'); 
    }) 
    .then(status => { 
    console.log(status); 
    return _page.property('content'); 
    }) 
    .then(content => { 
    console.log(content); 
    _page.close(); 
    _ph.exit(); 
    }) 
    .catch(e => console.log(e)) 
; 

回答

3

我不知道你在哪裏得到了格式,但最新的幻影JS做不使用回調,而是使用承諾。並且constructor(Phantom.create)需要數組形式的配置,而不是回調函數。

你的代碼需要類似於這個我認爲(我沒有測試過,但應該運行)。

var phantom = require('phantom'); 
var _ph, _page; 
phantom.create() 
    .then(function (ph) { 
    _ph = ph; 
    return ph.createPage(); 
    }) 
    .then(function (page) { 
    _page = page; 
    var url = "http://www.bdtong.co.kr/index.php?c_category=C02"; 
    return page.open(url); 
    }) 
    .then(function(page) { 
    page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() { 
     page.evaluate(function() { 
     $('.listMain > li').each(function() { 
      console.log($(this).find('a').attr('href')); 
     }); 
     }); 
    }); 
    }) 
    .catch(function(err) { 
    _page.close(); 
    _ph.exit(); 
    }) 
+0

我是不是能夠得到與您的解決方案的結果頁面中,我只收到一個字符串「成功」,但你的代碼幫助給我解決這個問題的方式,使用[這個例子]( https://github.com/amir20/phantomjs-node/blob/master/examples/simple.js)在github。不幸的是,我仍然無法獲得頁面的動態內容,只返回靜態內容和js函數,但這不是這個問題的一部分。謝謝! – Lioo