PhantomJS错误:UnhandledPromiseRejectionWarning

时间:2017-09-14 14:27:09

标签: javascript node.js npm web-scraping phantomjs

我的目标是使用Node.js从网站上抓取一些数据。

我已经设法仅使用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:未处理的promise promise(拒绝ID:1):错误:意外的参数类型。期待args成阵。

     

(node:6576)弃用警告:不推荐使用未处理的拒绝承诺。将来,未处理的承诺拒绝将使用非零退出代码终止Node.js进程。

任何想法如何解决这个问题?

修改

最终解决方案基于@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))
;

1 个答案:

答案 0 :(得分:3)

我不确定你从哪里获得格式,但最新的幻像JS不使用回调并使用promises代替。并且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();
  })