3

我复制粘贴了Github上的示例:

应用程序.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 上运行 node v5.2.0。)

4

1 回答 1

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。这也可能会产生您所看到的错误行为。

于 2016-03-03T16:27:58.777 回答