Кошмар JS не работает

Я знаю, что название вопроса выглядит очень расплывчато! Но это все.

Я установил nodejs на свой рабочий сервер, на котором phantomjs работал правильно, затем я установил кошмар через npm install nightmareЯ могу видеть это в node_modules, я попробовал пример, перечисленный разработчиками на 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)
  })

Ничего не произошло, скрипт ничего не выводил, я упростил скрипт до простого однократного перехода, для страницы на моем сервере эта страница никогда не вызывалась, когда я запускал скрипт через node file.js

У меня есть CentOS 6.7, phantomjs 1.1 Я также протестировал его на новой установке CentOS 7 с последней версией phantomjs, тоже самое.

Я пропускаю какое-то обязательное условие или что-то? Как мне решить проблему с node script.js не дает никакого выхода

ОБНОВЛЕНИЕ: Очевидно, проблема в том, что электрон, который используется кошмаром "вместо фантомов", требует графической среды, поэтому он не работает в моей среде.

3 ответа

Решение

Новая версия Nightmare требует electronНе фантомы Удостовериться electron команда находится в вашей переменной $PATH.

Установить Электрон

npm i -g electron-prebuilt

Для отладки:

DEBUG=nightmare* node script.js

Посмотрите на этот Dockerfile: https://github.com/aheuermann/docker-electron/blob/master/7/Dockerfile

Это минимальные библиотеки, которые вам нужны. И для начала вам скрипт:

Xvfb -ac -screen scrn 1280x2000x24 :9.0 &
export DISPLAY=:9.0
DEBUG=* node src/index.js

Электронное приложение больше не должно падать

Вы также можете попробовать установить electron в фоновом режиме, без отображения графического интерфейса. Вы проверяете, работает ли это:

var nightmare = Nightmare({ show: false});
Другие вопросы по тегам