2016-11-18 4 views
2

Le code suivant fonctionne avec NightmareJS et NodeJS. Cependant, je ne veux pas simplement consoler.log mon résultat JSON, mais je veux enregistrer mon résultat JSON dans un fichier local.NightmareJS enregistre la variable dans le fichier

Je connais l'option .html dans Nightmare mais je ne veux pas la page entière et je la veux au format JSON. Toute aide sur la sauvegarde de ticketData dans un fichier local?

nightmare 
    .goto('https://www.stubhub.com/') 
    .wait(3000) 
    .type('.inputbox', 'chicago bulls') 
    .mouseover('.search-action-button') 
    .click('.search-action-button') 
    .wait(3000) 
    .evaluate(function() { 
    var ticketData = {} 

ticketData.team = ([].slice.call(document.querySelectorAll('.event-title'))).map(function(x) { 
    return x.innerText 
}); 

ticketData.date = ([].slice.call(document.querySelectorAll('.date-stamp-month-dd'))).map(function(x) { 
    return x.innerText 
}); 

ticketData.price = ([].slice.call(document.querySelectorAll('.price'))).map(function(x) { 
    return x.innerText 
}); 

ticketData.url = ([].slice.call(document.querySelectorAll('.event-link'))).map(function(x) { 
    return x.href 
}); 

return ticketData; 
    }) 
    .then(function (data) { 
    console.log('Data = ' + JSON.stringify(data)); 
    return nightmare 
    }) 
    .catch(function (error) { 
    console.error('', error); 
    }); 

Répondre

4

Vous devez utiliser fs module de PhantomJS et fs.write function:

var fs = require('fs'); 
fs.write('ticket_data', JSON.stringify(data), 'w'); 

Ou fs module de Node.JS et fs.writeFileSync function:

var fs = require('fs'); 
fs.writeFileSync('ticket_data', JSON.stringify(data)); 

Par exemple:

var fs = require('fs'); 
.then(function (data) { 
fs.writeFileSync('ticket_data', JSON.stringify(data)); 
// fs.write('ticket_data', JSON.stringify(data), 'w'); 
// console.log('Data = ' +JSON.stringify(data)) 
}); 
2

J'ai eu exactement le même besoin et utilisé la syntaxe suivante pour "impressionner" le contenu JSON dans le fichier.

var writeToFile = function() { 
    fs.writeFile(setupFilePath, JSON.stringify(data, null, 4), function(err) { 
    if(err) { 
     // handle error 
    } 
    }); 
} 

Une chose à noter ici sont les paramètres supplémentaires passés à JSON.stringify() - ce indentera chaque ligne 4 espaces pour une meilleure lisibilité supplémentaire. Plus d'infos sur ce here.

je devais être très explicite sur mon chemin de fichier qui est défini comme suit:

var setupFilePath = __dirname + '/../../setup_info.json';