wonderbeyond
7/3/2015 - 2:50 PM

websnap-as-server.js

/**
 * Simple phantomjs use case:
 * Render web page and dump to page.html and page.png
 */
var page = require('webpage').create();
var fs = require('fs');

page.open('http://www.example.com', function(status) {
    if (status === "success") {
        var jsValue = page.evaluate(function() {
            document.body.bgColor = 'white';
            return $('html').get(0).outerHTML;
        });

        fs.write('page.html', jsValue, 'w');
        page.render('page.png');
    }
    phantom.exit();
});
/**
 * Simple phantomjs snapshot server
 */
var dataDir = 'snapshots';
var fs = require('fs');
var server = require('webserver').create();
var page = require('webpage').create();

page.settings.userAgent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36';

var listening = server.listen(8200, function (request, response) {
    console.log("Got request", request.url);
    var url = atob(decodeURIComponent(request.url.trim()).slice(1)).trim();  // decode from base64
    console.log("Start taking snapshot for", url);

    takeSnapshot(url);

    response.statusCode = 200;
    response.write("Done");
    response.close();
});


var takeSnapshot = function(url) {
    var urlBase64 = btoa(url);
    page.open(url, function(status) {
        if (status === "success") {
            // TODO:
            // - handle non-200
            // - stop page activity if done requests
            console.log('Taking snapshot successfully for', url);
            var jsValue = page.evaluate(function() {
                document.body.bgColor = 'white';
                return document.getElementsByTagName('html')[0].outerHTML;
            });

            fs.write(dataDir + '/' + urlBase64 + '.html', jsValue, 'w');
            page.render(dataDir + '/' + urlBase64 + '.png');
        } else {
            console.log('Failed to take snapshot for', url);
        }
        //phantom.exit();
    });
};