NightmareJS没有向终端返回任何东西?

时间:2015-12-24 16:49:48

标签: node.js nightmare

我复制粘贴Github上的示例:

app.js:

var Nightmare = require('nightmare');
var vo = require('vo');

vo(function* () {
  var nightmare = Nightmare({ show: true });
  var link = yield nightmare
    .goto('http://yahoo.com')
    .type('input[title="Search"]', 'github nightmare')
    .click('.searchsubmit')
    .wait('.ac-21th')
    .evaluate(function () {
      return document.getElementsByClassName('ac-21th')[0].href;
    });
  yield nightmare.end();
  return link;
})(function (err, result) {
  if (err) return console.log(err);
  console.log(result);
});

我做了:npm install nightmare vo

然后node --harmony app.js但没有输出:

alex@alex-K43U:~/node/nightmarejs$ node --harmony app.js
alex@alex-K43U:~/node/nightmarejs$ 

没有任何错误消息。可能是什么问题?

(我在Ubuntu上运行节点v5.2.0。)

1 个答案:

答案 0 :(得分:1)

两部分答案:

  1. 雅虎改变了部分内部命名。梦魇(作为这个答案的时间)并不是很好,除非对不存在的元素的操作失败,就像你的例子一样。雅虎名称的问题在#490中报告并在#491中修复。从修复:

    var Nightmare = require('nightmare');
    var nightmare = Nightmare({ show: true })
    
    nightmare
      .goto('http://yahoo.com')
      .type('input[title="Search"]', 'github nightmare')
      .click('#uh-search-button')
      .wait('#main')
      .evaluate(function () {
        return document.querySelector('#main .searchCenterMiddle li a').href
      })
      .end()
      .then(function (result) {
        console.log(result)
      });
    
  2. 如果您无头地跑步(例如,在Crouton或DigitalOcean或Docker下),我建议您查看#224。这也可能产生您所看到的错误行为。