2017-10-24 2 views
0

Ich versuche, Daten von einer Website zu extrahieren und ich möchte nach 10 Minuten Schleife, um zu sehen, ob die Daten geändert haben. Ich dachte, meine Funktionen in Module zu packen ist eine gute Idee, aber jetzt bin ich dran, meine aktuelle Alptrauminstanz vom Login-Modul zum Datenmodul zu bekommen.Modularisierung Alptraum und die Albtrauminstanz

start.js

var config = require('./config.json'); 
var login = require('./functions/login.js'); 
var data = require('./functions/data.js'); 
var vo = require('vo'); 

var Nightmare = require('nightmare'), 
nightmare = new Nightmare({ 
    show: config.nightmare.show, 
    typeInterval: config.nightmare.typeInterval, 
    webPreferences: { 
     images: config.nightmare.images, 
    } 
    }); 

vo(login.login)(nightmare, function (err, result) { 
    if (!result) return; 
    console.log('Logged in as ' + config.user.username) 
    vo(data.getData)(nightmare, function (err, result) { 
    console.log(result); 
    }) 
}) 

login.js

var config = require('../config.json'); 
var Nightmare = require('nightmare') 

function* login(nightmare) { 
    return yield nightmare 
     .goto('http://example.com/') 
     .click('.gogo').wait(2500) 
     .insert('.whsOnd', config.user.username) 
     .click('.RveJvd').wait(2500) 
     .insert('.whsOnd', config.user.password) 
     .click('.RveJvd').wait(4000) 
     .then(() => { 
      return true; 
     })   
} 
//login works 

module.exports = { 
    login: login 
} 

data.js

var config = require('../config.json'); 
var Nightmare = require('nightmare') 

function* getData(nightmare) { 
    console.log('Getting data ...' + nightmare) 
    return yield nightmare   
     .click('.index_menu').wait(1000) 
     .evaluate(()=>{ 
      // do stuff 
     })      
     .then((result) => { 
      return result; 
     }) 
     .catch((error) => { 
      console.log('Failure: ' + error) 
     }) 
} 

module.exports = { 
    getData: getData 
} 

Meine bewerten Funktionen das einzige Problem arbeiten, ist, dass, obwohl Alptraum ist nicht undefinierten in data.js ist zum Beispiel der Pfad.

+0

ich nicht über VO wusste, darüber zu lesen ein wenig es um Ihre Nutzung scheint völlig falsch ... – Salketer

+0

Dann, wie ich tun benutze es? – jonasdero

+0

kann ich nicht wirklich sagen ... Aber sieh dir mal die Readme an ... Erstmal benutzen sie .dann mit nur einem Callback, während du dann nicht benutzt, den Rückgabewert als Funktion direkt an, mit 2 Parameter ... Dies könnte ein Weg sein, es zu tun, ich denke einfach nicht, dass es der übliche Weg ist. – Salketer

Antwort

0

Sie haben separate Albtraum-Instanzen erstellt. Sie teilen nicht dieselbe Cookie-Sitzung, daher spiegelt sich Ihre Anmeldesitzung nicht in der getdata-Instanz wider. Sie können versuchen, den Cookie von der Login-Instanz zu übergeben und ihn in der getdata-Instanz zu setzen.

login.js

  nightmare 
      .goto('http://example.com/') 
      .click('.gogo').wait(2500) 
      .insert('.whsOnd', config.user.username) 
      .click('.RveJvd').wait(2500) 
      .insert('.whsOnd', config.user.password) 
      .click('.RveJvd').wait(4000) 
      .cookies.get() 
      .then((cookie) => { 
       return cookie; // pass this cookie to getdata 
      })  

data.js

nightmare 
    .cookies.set(cookies) //set cookies from login session 
    .click('.index_menu').wait(1000) 
    .evaluate(()=>{ 
       // do stuff 
      })      
    .then((result) => { 
      return result; 
      }) 
    .catch((error) => { 
      console.log('Failure: ' + error) 
      }) 
    } 
Verwandte Themen