Skip to content

Instantly share code, notes, and snippets.

@pste
Created August 31, 2017 13:39
Show Gist options
  • Save pste/57aada585ed37ff8bb12b59cb21c7d10 to your computer and use it in GitHub Desktop.
Save pste/57aada585ed37ff8bb12b59cb21c7d10 to your computer and use it in GitHub Desktop.

Revisions

  1. pste created this gist Aug 31, 2017.
    65 changes: 65 additions & 0 deletions node_working_dom_v1.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,65 @@
    var request = require('request');
    var jsdom = require('jsdom');
    var promise = require('promise');
    var colors = require('colors');
    var util = require('util');

    function get(url) {
    return new Promise(function (resolve, reject) {
    console.log('>>>'.yellow, 'started', 'get'.cyan, '[', url.yellow, ']');

    request(url, function(err, res, body) {
    if (!err && res.statusCode == 200) {
    console.log('>>>'.yellow, 'done'.green, 'get'.cyan, '[', url.yellow, ']');
    resolve(body);
    }
    else {
    console.log('get error:'.red);
    if (res && res.statusCode) console.log(' res:' + util.inspect(res.statusCode));
    console.log(' err:' + util.inspect(err));
    console.log('- - - - -'.red);
    reject(err);
    }
    });
    });
    }

    function buildDOM(body) {
    return new Promise(function (resolve, reject) {
    console.log('>>>'.yellow, 'started', 'buildDOM'.cyan, 'on', body.length, 'bytes');
    jsdom.env(body, ["http://code.jquery.com/jquery.js"], function(err, window) {
    if (typeof(window) === 'undefined') {
    console.log('buildDOM Error'.red + ': ' + util.inspect(err));
    reject(err);
    }
    else {
    console.log('>>>'.yellow, 'done'.green, 'buildDOM'.cyan);
    resolve(window.$);
    }
    }
    );
    });
    }

    function parse($) {
    return new Promise(function (resolve, reject) {
    console.log('>>>'.yellow, 'started', 'parse'.cyan);
    try {
    var result = $('input[name="btnI"]');
    console.log('>>>'.yellow, 'done'.green, 'parse'.cyan);
    resolve(result.attr('value'));
    }
    catch (ex) {
    console.log('Parse Error'.red, util.inspect(err));
    reject(ex);
    }
    });
    }

    function log(x) {
    console.log('>>>'.yellow, 'started', 'logging'.cyan);
    console.log('[',x,']');
    console.log('>>>'.yellow, 'done'.green, 'logging'.cyan);
    }

    get('http://www.google.com').then(buildDOM).then(parse).then(log);
    58 changes: 58 additions & 0 deletions node_working_dom_v2.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,58 @@
    const request = require('request');
    const jsdom = require("jsdom");
    const { JSDOM } = jsdom;
    const jquery = require('jquery');
    const util = require('util');

    function get(url) {
    return new Promise(function (resolve, reject) {
    console.log('>>>', 'started', 'get', '[', url, ']');

    request(url, function(err, res, body) {
    if (!err && res.statusCode == 200) {
    console.log('>>>', 'done', 'get', '[', url, ']');
    resolve(body);
    }
    else {
    console.log('get error:');
    if (res && res.statusCode) console.log(' res:' + util.inspect(res.statusCode));
    console.log(' err:' + util.inspect(err));
    console.log('- - - - -');
    reject(err);
    }
    });
    });
    }

    function buildDOM(body) {
    return new Promise(function (resolve, reject) {
    console.log('>>> started buildDOM on', body.length, 'bytes');
    var dom = new JSDOM(body);
    var $ = jquery(dom.window);
    console.log('>>>', 'done', 'buildDOM');
    resolve($);
    });
    }

    function parse($) {
    return new Promise(function (resolve, reject) {
    console.log('>>>', 'started', 'parse');
    try {
    var result = $('input[name="btnI"]');
    console.log('>>>', 'done', 'parse');
    resolve(result.attr('value'));
    }
    catch (ex) {
    console.log('Parse Error', util.inspect(err));
    reject(ex);
    }
    });
    }

    function log(x) {
    console.log('>>>', 'started', 'logging');
    console.log('[',x,']');
    console.log('>>>', 'done', 'logging');
    }

    get('http://www.google.com').then(buildDOM).then(parse).then(log);