问题
I know the title of the question looks very vague! But that's there's to it.
I installed nodejs on my production server, which had phantomjs working properly, then I installed nightmare via npm install nightmare
, I can see it in node_modules, I tried the example listed by the developers on github:
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)
})
Nothing happened, the script did not output anything, I simplified the script to a simple single goto, for a page on my server, the page was never called when I ran the script via node file.js
I have CentOS 6.7, phantomjs 1.1 I also tested it on a fresh CentOS 7 installation with latest version of phantomjs, same thing.
Am I missing some kind of prerequisite or something? How do I debug the issue since node script.js
is not giving any output
UPDATE: Apparently the problem is, electron, which is used by nightmare 'instead of phantomjs' requires a graphical enviroment, which is why it fails to run in my enviroment.
回答1:
New version of Nightmare requires electron
, Not PhantomsJs. Make sure electron
command is in your $PATH variable.
Install Electron
npm i -g electron-prebuilt
To debug:
DEBUG=nightmare* node script.js
回答2:
Look at this Dockerfile: https://github.com/aheuermann/docker-electron/blob/master/7/Dockerfile
It s the minimal libs you need. And to start you script:
Xvfb -ac -screen scrn 1280x2000x24 :9.0 &
export DISPLAY=:9.0
DEBUG=* node src/index.js
Electron based app should no more crash
回答3:
You can also try to set electron
in the background without actually showing any GUI. You check if this works:
var nightmare = Nightmare({ show: false});
来源:https://stackoverflow.com/questions/36719236/nightmare-js-not-working