Conditional viewing Nightmare.js

I am trying to figure out how I should make a nightmare.js script using the if-then logic. for instance

var Nightmare = require('nightmare'); var nightmare = Nightmare({ show: true, paths: { userData: '/dev/null' } }); nightmare .goto('http://www.example.com/') .wait('h1') .evaluate(function() { return document.querySelector('title').innerText; }) // here: go to url1 if title == '123' otherwise to url2 .end() .then(function() { console.log('then', arguments); }).catch(function() { console.log('end', arguments); }); 

How do I make this script go to a different URL depending on the result of the evaluation?

+5
source share
1 answer

Since Nightmare then is capable, you can return it from .then() to bind it as if you were a regular Promises.

 var Nightmare = require('nightmare'); var nightmare = Nightmare({ show: true, paths: { userData: '/dev/null' } }); nightmare .goto('http://www.example.com/') .wait('h1') .evaluate(function() { return document.querySelector('title') .innerText; }) .then(function(title) { if (title == 'someTitle') { return nightmare.goto('http://www.yahoo.com'); } else { return nightmare.goto('http://w3c.org'); } }) .then(function() { //since nightmare is `then`able, this `.then()` will //execute the call chain described and returned in //the previous `.then()` return nightmare //... other actions... .end(); }) .then(function() { console.log('done'); }) .catch(function() { console.log('caught', arguments); }); 

If you need more synchronous logic, you might consider using generators with vo or co . For example, the above is rewritten using vo :

 var Nightmare = require('nightmare'); var vo = require('vo'); vo(function * () { var nightmare = Nightmare({ show: true, paths: { userData: '/dev/null' } }); var title = yield nightmare .goto('http://www.example.com/') .wait('h1') .evaluate(function() { return document.querySelector('title') .innerText; }); if (title == 'someTitle') { yield nightmare.goto('http://www.yahoo.com'); } else { yield nightmare.goto('http://w3c.org'); } //... other actions... yield nightmare.end(); })(function(err) { if (err) { console.log('caught', err); } else { console.log('done'); } }); 
+10
source

All Articles