Nightmare.js在Ubuntu Linux云服务器上无法正常工作

Obi*_*ill 6 javascript linux ubuntu node.js nightmare

我似乎无法让nightmare.js在Ubuntu Linux 14.04服务器上工作[通过DigitalOcean].

我安装了PhantomJS(1.9.8)和Node(4.2.4),据我所知,它们运行良好.

例如,当我运行这个时:

phantomjs loadspeed.js http://www.yahoo.com
Run Code Online (Sandbox Code Playgroud)

with loadspeed.js包含:

"use strict";
var page = require('webpage').create(),
    system = require('system'),
    t, address;

if (system.args.length === 1) {
    console.log('Usage: loadspeed.js <some URL>');
    phantom.exit(1);
} else {
    t = Date.now();
    address = system.args[1];
    page.open(address, function (status) {
        if (status !== 'success') {
            console.log('FAIL to load the address');
        } else {
            t = Date.now() - t;
            console.log('Page title is ' + page.evaluate(function () {
                return document.title;
            }));
            console.log('Loading time ' + t + ' msec');
        }
        phantom.exit();
    });
}
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

Page title is Yahoo
Loading time 700 msec
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试运行一个简单的噩梦时:

node --harmony hello_nightmare.js
Run Code Online (Sandbox Code Playgroud)

使用hello_nightmare.js包含:

var Nightmare = require('nightmare');

var google = new Nightmare()
  .goto('http://google.com')
  .wait()
  .run(function(err, nightmare) {
    if (err) return console.log(err);
    console.log('Done!');
  });
Run Code Online (Sandbox Code Playgroud)

我没有得到任何输出; 感觉就像我刚刚在命令行上按下'Enter'.

我也尝试了关于梦魇github网站的例子:

npm install nightmare vo
node --harmony hello_nightmare_main.js
Run Code Online (Sandbox Code Playgroud)

使用hello_nightmare_main.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);
});
Run Code Online (Sandbox Code Playgroud)

它仍然无法正常工作.

我该如何解决这个噩梦?

yoz*_*yoz 9

您的问题很可能由https://github.com/segmentio/nightmare/issues/224描述

梦魇使用需要X显示的Electron; 由于您的服务器没有显示器,您可以使用Xvfb提供虚拟显示器.安装xvfb,然后运行

xvfb-run node --harmony hello_nightmare.js

  • 谢谢.我刚刚运行了这个`apt-get install -y xvfb x11-xkb-utils xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic x11-apps clang libdbus-1-dev libgtk2.0-dev libnotify-dev libgnome-keyring- dev libgconf2-dev libasound2-dev libcap-dev libcups2-dev libxtst-dev libxss1 libnss3-dev gcc-multilib g ++ - multilib`,然后尝试了xvfb命令,但我也没有得到任何输出. (2认同)

Obi*_*ill 8

我只是为后人发布这个.

下面是在干净的Ubuntu Linux机器上安装带有节点(4.2.4)的nightmarejs的bash脚本.我在运行14.04的DigitalOcean液滴上测试了这个.

apt-get -y update
apt-get -y upgrade
apt-get -y --force-yes install make unzip g++ libssl-dev git xvfb x11-xkb-utils xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic x11-apps clang libdbus-1-dev libgtk2.0-dev libnotify-dev libgnome-keyring-dev libgconf2-dev libasound2-dev libcap-dev libcups2-dev libxtst-dev libxss1 libnss3-dev gcc-multilib g++-multilib
mkdir src
cd src
wget https://nodejs.org/dist/v4.2.4/node-v4.2.4.tar.gz
tar xzf node-v4.2.4.tar.gz
cd node-v4.2.4
./configure
make -j2
make install
cd ..
mkdir nightmarejs
cd nightmarejs
npm -f init
npm install --save nightmare vo
Run Code Online (Sandbox Code Playgroud)

然后你只需创建.js文件(例如hello_nightmare.js)(在安装nightmarejs的同一目录中),然后使用下面的命令运行它(如@ yoz的回答中所述):

xvfb-run node --harmony hello_nightmare.js
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助.

  • 干杯队友,我最终使用了node-xvfb.所以,只需要在我的nightmarejs代码之前使用xvfb.startSync(),并在nightmarejs完成之后使用xvfb.stopSync(). (3认同)

Kha*_*edP 6

由于电子需要X显示,您需要安装以下所有包

sudo apt-get install -y xvfb x11-xkb-utils xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic x11-apps clang libdbus-1-dev libgtk2.0-dev libnotify-dev libgnome-keyring-dev libgconf2-dev libasound2-dev libcap-dev libcups2-dev libxtst-dev libxss1 libnss3-dev gcc-multilib g++-multilib

在ubuntu服务器中测试过aws ec2并且工作正常

然后运行你的脚本:

xvfb-run node --harmony script.js