Cron和噩梦js

时间:2016-11-01 05:12:36

标签: javascript cron nightmare

我正试图在当地运行一个带有梦魇js的cron。 不幸的是我有这个错误。

Unhandled rejection (<{"message":"navigation error","code":-...>, no stack trace)

相关问题:Nightmare JS not working

我想知道它是否与梦魇需要图形界面的事实相关联?

感谢您的帮助,

修改

在我的cron中,我有一个Promise函数,它由cron和promises组成。

var job = new CronJob('* */10 * * * *', function() {
    crawl()
  }, function () {
    console.log("crawl ended")
  },
  true
);


job.start();

这是噩梦的样子:

var Nightmare = require('nightmare');
var nightmare = Nightmare({
  typeInterval: 300,
  show: true
});

nightmare
  .goto('https://pageThatRequireToLoginThenDiplayJsonAsText.com')
  .type('[name=email]', '')
  .wait(1000)
  .type('[name=email]', 'myemail')
  .wait(1000)
  .type('[name=password]', '')
  .wait(1000)
  .type('[name=password]', 'mypassword')
  .click('[type=submit]')
  .wait(25000)
  .wait(25000)
  .evaluate(function (page, done) {

    document.documentElement
    done()
  })
  .end()
  .then(function (result) {
    // fs.writeFileSync('testOutput.json', JSON.stringify(result));
    console.log(JSON.stringify(result))
  })
  .catch(function (error) {
    console.error('failed:', error);
  });

当我在没有cron的情况下运行函数crawl时,它运行得很好。

2 个答案:

答案 0 :(得分:1)

好的,马上我不确定我是否正确,因为我没有太多的经验,你没有指明你在你的cron中定义的内容。但是从我的快速搜索中我所猜测的是正确的。当您使用cron通过命令行进行调用时。现在Nightmare建立在Electron上,而Electron又依赖于Chromium。现在从我学到的here开始,Electron可能会有一个错误,每次页面在真正的铬浏览器上立即加载时都会导致超时。因此,从我到目前为止收集的内容来看,您的应用需要Electron与Chromium进行通信才能正常工作,在您的情况下,它似乎并没有这样做。我很抱歉是模糊的,可能是错的,但我最好能提出这么少的信息。

答案 1 :(得分:0)

我的问题出在了cron的设置中。 我宁愿使用

var job = new CronJob('* 10 * * * *', function() {
    crawl()
  }, function () {
    console.log("crawl ended")
  },
  true
);

另外,我必须重新定义噩梦设置INTO我的功能。

var get_data = function(){
  var Nightmare = require('nightmare');
  var nightmare = Nightmare({
    typeInterval: 300,
    show: true
  });
  nightmare
  .goto('https://pageThatRequireToLoginThenDiplayJsonAsText.com')
  .type('[name=email]', '')
  .wait(1000)
  .type('[name=email]', 'myemail')
  .wait(1000)
  .type('[name=password]', '')
  .wait(1000)
  .type('[name=password]', 'mypassword')
  .click('[type=submit]')
  .wait(25000)
  .wait(25000)
  .evaluate(function (page, done) {

    document.documentElement
    done()
  })
  .end()
  .then(function (result) {
    // fs.writeFileSync('testOutput.json', JSON.stringify(result));
    console.log(JSON.stringify(result))
  })
  .catch(function (error) {
    console.error('failed:', error);
  });
}

而不是

var Nightmare = require('nightmare');
var nightmare = Nightmare({
  typeInterval: 300,
  show: true
});

var get_data = function(){
  nightmare
  .goto('https://pageThatRequireToLoginThenDiplayJsonAsText.com')
  .type('[name=email]', '')
  .wait(1000)
  .type('[name=email]', 'myemail')
  .wait(1000)
  .type('[name=password]', '')
  .wait(1000)
  .type('[name=password]', 'mypassword')
  .click('[type=submit]')
  .wait(25000)
  .wait(25000)
  .evaluate(function (page, done) {

    document.documentElement
    done()
  })
  .end()
  .then(function (result) {
    // fs.writeFileSync('testOutput.json', JSON.stringify(result));
    console.log(JSON.stringify(result))
  })
  .catch(function (error) {
    console.error('failed:', error);
  });
}