Installation and System Setup
Download nodejs installer from http://nodejs.org/download/After installation open the command prompt and type
C:\>node --version //prints the version number C:\>npm -version //npm is a NodeJS package manager. it's used to install node programs.The next step would be to install all the dependencies for the project, -g flag is to install the module globally.
C:\>npm install -g socket.io C:\>npm install -g phantomjs C:\>npm install -g node-static C:\>npm ls //lists out all the modules installed
The project contains 3 pieces,
nodejs_example1.js - is the server code that defines how the server talks to the client.
nodejs_example1.html - is the html page loaded in the client browser.
phantomjs_example1.js - contains the phantomjs code to take the screenshot
nodejs_example1.js
var http = require('http')
, io = require('socket.io')
, fs = require('fs')
, os = require('os')
, path = require('path')
, childProcess = require('child_process')
, phantomjs = require('phantomjs');
var server = http.createServer(onCreateHandler);
var socket = io.listen(server);
server.listen(8090);
var sessionid;
function onCreateHandler(req, res) {
fs.readFile(__dirname + '/nodejs_example1.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading nodejs_example1.html');
}
res.writeHead(200);
res.end(data);
});
}
socket.on('connection', function (socket) {
sessionid = genRandNum();
socket.emit('session id', { id: sessionid});
socket.on('capture screen event', function (id, url) {
if(sessionid == id){
captureScreenShot(url);
}else{
console.log("Invalid Session ID");
}
});
});
function captureScreenShot(data){
var binPath = phantomjs.path;
output = os.arch() + os.platform() + "_" + Math.round(os.uptime()) + '.png';
var childArgs = [
path.join(__dirname, 'phantomjs_example1.js'),
data,
output]
console.log(childArgs);
childProcess.execFile(binPath, childArgs, function(err, stdout, stderr) {
// handle results
})
}
function genRandNum() {
return Math.floor((Math.random()*10)+1); //Return a random number between 1 and 10
}
nodejs_example1.html<html>
<head>
<script type="text/javascript" src="http://localhost:8090/socket.io/socket.io.js"></script>
<script type="text/javascript" src="http://localhost:8090/phantomjs/phantomjs.js"></script>
<script type="text/javascript" src="http://localhost:8090/phantom/phantom.js"></script>
<script>
var socket = io.connect('http://localhost');
var sessionid = 0;
socket.on('session id', function (data) {
sessionid = data.id;
});
function captureScreenShot(){
socket.emit('capture screen event', sessionid, document.getElementById("inputurl").value );
}
</script>
</head>
<body>
url for screenshots <input type="text" id="inputurl" value="https://www.google.com/"><br>
<input type="submit" value="Get Screen Shot" onclick="captureScreenShot()">
</body>
</html>
phantomjs_example1.js
var system = require('system');
var page = require('webpage').create();
address = system.args[1];
output = system.args[2];
//debug_address = 'https://www.google.com/';
//debug_output = 'hello.png';
page.open(address, function (status) {
console.log(address);
if (status !== 'success') {
console.log('Unable to load the address!');
phantom.exit();
} else {
window.setTimeout(function () {
page.render(output);
phantom.exit();
}, 200);
}
});
To Run the code, (note all three files must be in the same folder)
start your server as follows,C:\>node nodejs_example1.js
Open the bowser and load the following page "http://localhost:8090/", Click on the "Get ScreenShot" button, the screenshot gets stored in your local folder.
The next blog would be about sending the screenshot to the server.