Skip to content
Related Articles

Related Articles

Introduction and Installation of Nightmare.js
  • Difficulty Level : Expert
  • Last Updated : 14 Apr, 2021

Nightmare is provided by Segment and is a high-level browser automation library. The goal for this Nightmare is to follow the path of the user actions (like goto, type, click, etc.), in order to expose few simple methods with an API that feels synchronous for each block of scripting, rather than deeply nested callbacks. It has been designed for automating tasks across sites that don’t have APIs, but nowadays is most often used for crawling, UI testing, etc. 

Note: Nightmare is intended to be run on NodeJS 4.x or higher.

Alternatives to Nightmare.js: There are many alternatives for this, Some of the most common alternatives of Nightmate.js are:

  • Puppeteer
  • PhantomJS
  • fancybox
  • MomentJS
  • Lodash
  • Underscore

Project Setup and installing required moduels:

  • Step 1: Install Nightmare.js and Jquery module using the following command:



    npm install nightmare
    npm install jquery
  • Step 2: Create an index.js file and require the module using the following way:

    const Nightmare = require('nightmare');
    nightmare = Nightmare({ show: true});

This will create an instance of Nightmare which can navigate to the web. It is possible to put optional parameters in the JSON passed inside the Nightmare() as shown above.

Project Structure: It will look like the following.

 

Example: Let us see an example to use Nightmare.js for CraigLists scrapping:

Filename: index.js 

index.js




var jquery = require('jquery')
var Nightmare = require('nightmare'),
    nightmare = Nightmare()
  
var city = process.argv[2]
  
// Use the first argument passed as the city to be searched
nightmare.goto('http://' + city + 
'.craigslist.org/search/cpg?is_paid=yes&postedToday=1')
  
    // Visits the city specified by the user and gets all computer 
    // gigs posted that day
    .wait(2000)
  
    // Wait 2 seconds so page is guaranteed to be fully loaded
    .evaluate(function () {
        var gigs = [];
  
        // Create an array to hold all gigs gathered by following code
        $('.hdrlnk').each(function () {
            item = {}
            item["title"] = $(this).text()
            item["link"] = $(this).attr("href")
            gigs.push(item)
        })
  
        // Create a gig object with title and link, then push 
        // to the 'gigs' array
        return gigs
        // Pass the gigs array forward so it can be looped through later on
    })
    .end()
    .then(function (result) {
        for (gig in result) {
            console.log(result[gig].title);
        }
        // Print each gig to the console in a neat format
    })

Run the index.js file using the following command:

node index.js cityname

For example, we can search for saltlakecity as shown below:

node index.js saltlakecity

Output: Wait for few seconds, and you will get the output.

My Personal Notes arrow_drop_up
Recommended Articles
Page :