Nightmare.js 在 Ubuntu Linux 云服务器上没有按预期工作
Nightmare.js not working as expected on Ubuntu Linux cloud server
我似乎无法 nightmare.js 在 Ubuntu Linux 14.04 服务器 [通过 DigitalOcean] 上工作。
我已经安装了 PhantomJS (1.9.8) 和 Node (4.2.4),据我所知它们运行良好。
例如,当我运行这个:
phantomjs loadspeed.js http://www.yahoo.com
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();
});
}
我得到以下输出:
Page title is Yahoo
Loading time 700 msec
然而,当我尝试 运行宁一个简单的噩梦时:
node --harmony hello_nightmare.js
with 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!');
});
我没有得到任何输出;感觉就像我刚刚在命令行上按了'Enter'。
我也试过噩梦github网站上的例子:
npm install nightmare vo
node --harmony hello_nightmare_main.js
with 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);
});
还是不行。
我该如何解决这个噩梦?
您的问题最有可能描述为
https://github.com/segmentio/nightmare/issues/224
Nightmare 使用需要 X 显示的 Electron;由于您的服务器没有显示器,您可以使用 Xvfb 提供虚拟显示器。安装 xvfb,然后 运行
xvfb-run node --harmony hello_nightmare.js
我只是为了后代而发布这个。
下面是 bash 脚本,用于在干净的 Ubuntu Linux 机器上使用节点 (4.2.4) 安装 nightmarejs。我已经在 DigitalOcean 液滴 运行ning 14.04 上对此进行了测试。
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
然后您只需创建 .js 文件(例如 hello_nightmare.js)(在安装 nightmarejs 的同一目录中)然后使用下面的命令 运行 它(如@yoz 中已经提到的)答案):
xvfb-run node --harmony hello_nightmare.js
希望对您有所帮助。
由于 electron 需要 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
在 aws ec2
的 ubuntu 服务器中进行了测试并且有效
然后 运行 你的脚本:
xvfb-run node --harmony script.js
Nightmare.js 使用 Electron 浏览器并需要 X 服务器。安装 xvfb 及其依赖项,以便您可以 运行 没有显示硬件的图形应用程序:
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 \
libgconf2-dev \
libasound2-dev libcap-dev \
libcups2-dev libxtst-dev \
libxss1 libnss3-dev \
gcc-multilib g++-multilib
创建 nightmare.js
文件并添加以下内容:
const Nightmare = require("nightmare");
const outputFile = "test.png";
const nightmare = Nightmare({ show: true })
nightmare
.goto('https://duckduckgo.com')
.type('#search_form_input_homepage', 'github nightmare')
.click('#search_button_homepage')
.wait('#r1-0 a.result__a')
.evaluate(() => document.querySelector('#r1-0 a.result__a').href)
.end()
.then(res => {
console.log(res)
})
.catch(error => {
console.error('Search failed:', error)
})
运行 脚本:
$ xvfb-run node --harmony nightmare.js
// output: https://github.com/segmentio/nightmare
我似乎无法 nightmare.js 在 Ubuntu Linux 14.04 服务器 [通过 DigitalOcean] 上工作。
我已经安装了 PhantomJS (1.9.8) 和 Node (4.2.4),据我所知它们运行良好。
例如,当我运行这个:
phantomjs loadspeed.js http://www.yahoo.com
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();
});
}
我得到以下输出:
Page title is Yahoo
Loading time 700 msec
然而,当我尝试 运行宁一个简单的噩梦时:
node --harmony hello_nightmare.js
with 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!');
});
我没有得到任何输出;感觉就像我刚刚在命令行上按了'Enter'。
我也试过噩梦github网站上的例子:
npm install nightmare vo
node --harmony hello_nightmare_main.js
with 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);
});
还是不行。
我该如何解决这个噩梦?
您的问题最有可能描述为 https://github.com/segmentio/nightmare/issues/224
Nightmare 使用需要 X 显示的 Electron;由于您的服务器没有显示器,您可以使用 Xvfb 提供虚拟显示器。安装 xvfb,然后 运行
xvfb-run node --harmony hello_nightmare.js
我只是为了后代而发布这个。
下面是 bash 脚本,用于在干净的 Ubuntu Linux 机器上使用节点 (4.2.4) 安装 nightmarejs。我已经在 DigitalOcean 液滴 运行ning 14.04 上对此进行了测试。
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
然后您只需创建 .js 文件(例如 hello_nightmare.js)(在安装 nightmarejs 的同一目录中)然后使用下面的命令 运行 它(如@yoz 中已经提到的)答案):
xvfb-run node --harmony hello_nightmare.js
希望对您有所帮助。
由于 electron 需要 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
在 aws ec2
的 ubuntu 服务器中进行了测试并且有效
然后 运行 你的脚本:
xvfb-run node --harmony script.js
Nightmare.js 使用 Electron 浏览器并需要 X 服务器。安装 xvfb 及其依赖项,以便您可以 运行 没有显示硬件的图形应用程序:
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 \
libgconf2-dev \
libasound2-dev libcap-dev \
libcups2-dev libxtst-dev \
libxss1 libnss3-dev \
gcc-multilib g++-multilib
创建 nightmare.js
文件并添加以下内容:
const Nightmare = require("nightmare");
const outputFile = "test.png";
const nightmare = Nightmare({ show: true })
nightmare
.goto('https://duckduckgo.com')
.type('#search_form_input_homepage', 'github nightmare')
.click('#search_button_homepage')
.wait('#r1-0 a.result__a')
.evaluate(() => document.querySelector('#r1-0 a.result__a').href)
.end()
.then(res => {
console.log(res)
})
.catch(error => {
console.error('Search failed:', error)
})
运行 脚本:
$ xvfb-run node --harmony nightmare.js
// output: https://github.com/segmentio/nightmare