Cron dan mimpi buruk js

Saya mencoba menjalankan cron dengan Nightmare js secara lokal. Sayangnya saya mengalami kesalahan ini.

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

Masalah terkait : Nightmare JS tidak berfungsi

Saya bertanya-tanya apakah ini terkait dengan fakta bahwa mimpi buruk memerlukan antarmuka grafis?

Terima kasih atas bantuan Anda,

Sunting

Di cron saya, saya memiliki satu fungsi Promise yang terdiri dari cron diikuti dengan janji.

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


job.start();

Berikut penampakan mimpi buruknya:

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);
  });

Ketika saya menjalankan fungsi crawl tanpa cron, itu berfungsi dengan baik.


person Quentin Del    schedule 01.11.2016    source sumber


Jawaban (2)


Oke langsung saja saya tidak yakin apakah saya benar atau tidak karena saya tidak memiliki terlalu banyak pengalaman dengan ini dan Anda belum menentukan apa yang Anda definisikan di cron Anda. Tapi dari pencarian cepat saya membuat apa yang Anda duga benar. Saat Anda menggunakan cron, panggilan Anda dilakukan melalui baris perintah. Sekarang Nightmare dibangun di atas Elektron yang pada gilirannya bergantung pada Chromium. Sekarang dari apa yang saya pelajari di sini, Electron mungkin memiliki bug yang menyebabkan waktu tunggu habis setiap kali halaman dimuat secara instan di browser chromium asli. Jadi dari apa yang saya kumpulkan sejauh ini, aplikasi Anda memerlukan Electron yang berkomunikasi dengan Chromium agar berfungsi dengan baik, yang dalam kasus Anda sepertinya tidak berfungsi. Saya minta maaf karena tidak jelas dan mungkin salah, tetapi ini adalah hal terbaik yang bisa saya berikan dengan sedikit informasi.

person Ayaskant Mishra    schedule 01.11.2016
comment
Baik sekali Anda mencoba membantu mengatasi masalah yang tidak jelas ini. +1 - person Mulan; 01.11.2016
comment
Terima kasih atas bantuan Anda Ayaskant. Saya akan mencoba bekerja dengan PhantomJS. - person Quentin Del; 01.11.2016
comment
@QuentinDel mimpi buruk jauh lebih unggul - person Mulan; 01.11.2016
comment
@naomik Terima kasih atas tip Anda. Saya mengajukan pertanyaan yang lebih tepat dengan mimpi buruk di sini: stackoverflow.com/questions/40379389/cron- dan-mimpi buruk - person Quentin Del; 02.11.2016

Masalah saya ada di pengaturan cron. Saya lebih suka menggunakan

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

Ditambah lagi, saya harus mendefinisikan ulang pengaturan mimpi buruk ke dalam fungsi saya.

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);
  });
}

Alih-alih

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);
  });
}
person Quentin Del    schedule 04.11.2016