intel-screenbot

An Ingress Intel Map Bot for Hangoutsbot
git clone git://archive.git.mtrnord.blog/MTRNord/intel-screenbot.git
Log | Files | Refs | README | LICENSE

screencap.js (24268B)


      1 var system = require('system');
      2 var args = system.args;
      3 var page = require('webpage').create();
      4 var fs = require('fs');
      5 var cookiespath = '/tmp/.iced_cookies';
      6 var config = '';
      7 var loginTimeout = '5000';
      8 if (args.length === 1) {
      9     console.log('Try to pass some args when invoking this script!');
     10 } else {
     11   var arguments_file  = args[1];
     12   var arguments = JSON.parse(fs.read(arguments_file));
     13   if (arguments.hasOwnProperty('plugins')) {
     14     var plugins = arguments["plugins"]
     15   }
     16   if (arguments.hasOwnProperty('zoomlevel')) {
     17     var zoomlevel = arguments["zoomlevel"]
     18   }
     19   var maptype = arguments["maptype"]
     20   var search = arguments["search"]
     21   var url = arguments["url"]
     22   var filepath = arguments['filepath']
     23   var user = arguments['email']
     24   var pass = arguments['password']
     25   var screenshotfunction = arguments['screenshotfunction']
     26   if(screenshotfunction == "portalinfoText"){
     27     var portalinfoResponse = arguments['portalinfoResponse']
     28   }
     29 }
     30 
     31 function loadCookies(callback) {
     32   if(fs.exists(cookiespath)) {
     33     var stream = fs.open(cookiespath, 'r');
     34 
     35     while(!stream.atEnd()) {
     36       var line = stream.readLine().split('=');
     37       if(line[0] === 'SACSID') {
     38         config.SACSID = line[1];
     39       } else if(line[0] === 'csrftoken') {
     40         config.CSRF = line[1];
     41       } else {
     42         config.SACSID = '';
     43         config.CSRF = '';
     44       }
     45     }
     46     stream.close();
     47   }
     48   callback();
     49 }
     50 
     51 function addCookies(sacsid, csrf) {
     52   phantom.addCookie({
     53     name: 'SACSID',
     54     value: sacsid,
     55     domain: 'www.ingress.com',
     56     path: '/',
     57     httponly: true,
     58     secure: true
     59   });
     60   phantom.addCookie({
     61     name: 'csrftoken',
     62     value: csrf,
     63     domain: 'www.ingress.com',
     64     path: '/'
     65   });
     66 }
     67 
     68 loadCookies(function() {
     69   if (config.SACSID == undefined || config.SACSID == '') {
     70     firePlainLogin(user, pass, url);
     71   } else {
     72     addCookies(config.SACSID, config.CSRF);
     73     afterLogin(url, search, "cookie");
     74   }
     75 });
     76 
     77 function waitFor ($config) {
     78     $config._start = $config._start || new Date();
     79     if ($config.timeout && new Date - $config._start > $config.timeout) {
     80         if ($config.error) $config.error();
     81         return;
     82     }
     83     if ($config.check()) {
     84         return $config.success();
     85     }
     86     setTimeout(waitFor, $config.interval || 0, $config);
     87 }
     88 
     89 
     90 function isSignedIn() {
     91   return page.evaluate(function() {
     92     return document.getElementsByTagName('a')[0].innerText.trim() !== 'Sign in';
     93   });
     94 }
     95 
     96 function storeCookies() {
     97   var cookies = page.cookies;
     98   fs.write(cookiespath, '', 'w');
     99   for(var i in cookies) {
    100     fs.write(cookiespath, cookies[i].name + '=' + cookies[i].value +'\n', 'a');
    101   }
    102 }
    103 
    104 function firePlainLogin(user, pass, url) {
    105   page.settings.userAgent = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b3) Gecko/20090305 Firefox/3.1b3 GTB5';
    106   page.open('https://www.ingress.com/intel', function (status) {
    107     page.evaluate(function () {
    108       localStorage.clear()
    109     });
    110     if (status !== 'success') {console.log("Login ERROR"); phantom.exit(0);}
    111     var link = 'https://www.google.com/accounts/ServiceLogin?service=ah&passive=true&continue=https://appengine.google.com/_ah/conflogin%3Fcontinue%3Dhttps://www.ingress.com/intel&ltmpl='
    112     page.open(link, function () {
    113       login(user, pass, url);
    114     });
    115   });
    116 }
    117 
    118 function login(l, p, url) {
    119     if (document.querySelector('#timeoutError')){
    120         firePlainLogin(l, p)
    121     }
    122     waitFor({
    123         timeout: loginTimeout*2,
    124         check: function () {
    125             return page.evaluate(function() {
    126                 if (document.querySelector('#gaia_loginform')) {
    127                     return true;
    128                 }else{
    129                     return false;
    130                 }
    131             });
    132         },
    133         success: function () {
    134             page.evaluate(function (l) {
    135                 document.getElementById('Email').value = l;
    136             }, l);
    137             page.evaluate(function () {
    138                 document.querySelector("#next").click();
    139             });
    140             window.setTimeout(function () {
    141                 page.evaluate(function (p) {
    142                     document.getElementById('Passwd').value = p;
    143                 }, p);
    144                 if(document.querySelector("#next")){
    145                     page.evaluate(function () {
    146                         document.querySelector("#next").click();
    147                     });
    148                 }else{
    149                     page.evaluate(function () {
    150                         document.querySelector("#signIn").click();
    151                     });
    152                 }
    153                 window.setTimeout(function () {
    154                     if (page.url.substring(0,40) === 'https://accounts.google.com/ServiceLogin') {
    155                         console.log("login failed: wrong email and/or password")
    156                         phantom.exit(0);
    157                     }
    158 
    159                     if (page.url.substring(0,40) === 'https://appengine.google.com/_ah/loginfo') {
    160                         page.evaluate(function () {
    161                             document.getElementById('persist_checkbox').checked = true;
    162                             document.getElementsByTagName('form').submit();
    163                         });
    164                     }
    165 
    166                     if (page.url.substring(0,44) === 'https://accounts.google.com/signin/challenge') {
    167                         twostep = system.stdin.readLine();
    168                     }
    169                     window.setTimeout(afterLogin(url, search, "plain"), loginTimeout);
    170                 }, loginTimeout)
    171             }, loginTimeout / 10);
    172         },
    173         error: function () {
    174             phantom.exit(0);
    175         }
    176     });
    177 }
    178 
    179 function map(search){
    180   setTimeout(function() {
    181     if (search != 'nix') {
    182       searchfunc(search);
    183     }
    184     waitFor({
    185       timeout: 240000,
    186       check: function () {
    187         return page.evaluate(function(zoomlevel) {
    188           if (document.querySelector('.map').textContent.indexOf('done') != -1) {
    189             return true;
    190           }else{
    191             console.log('generateFakeOutput')
    192             return false;
    193           }
    194         }, zoomlevel);
    195       },
    196       success: function () {
    197         var startTime = new Date().getTime();
    198         var interval = setInterval(function(){
    199           if(new Date().getTime() - startTime > 5000){
    200             hideDebris();
    201             prepare('1280', '720');
    202             main();
    203             clearInterval(interval);
    204             return;
    205           }
    206           console.log('generateFakeOutput')
    207         }, 1000);
    208       },
    209       error: function () {
    210         var startTime = new Date().getTime();
    211         var interval = setInterval(function(){
    212           if(new Date().getTime() - startTime > 5000){
    213             hideDebris();
    214             prepare('1280', '720');
    215             main();
    216             clearInterval(interval);
    217             return;
    218           }
    219           console.log('generateFakeOutput')
    220         }, 1000);
    221       }
    222     });
    223   }, "1000");
    224 }
    225 
    226 function portalinfoScreen(){
    227   setTimeout(function() {
    228     waitFor({
    229       timeout: 240000,
    230       check: function () {
    231         return page.evaluate(function() {
    232           if (document.querySelector('.map').textContent.indexOf('done') != -1) {
    233             return true;
    234           }else{
    235             console.log('generateFakeOutput')
    236             return false;
    237           }
    238         });
    239       },
    240       success: function () {
    241 	var clipRect = page.evaluate(function(){
    242 	  return document.querySelector('#sidebar').getBoundingClientRect();
    243 	});
    244 	page.evaluate(function(){
    245 	  document.querySelector('#playerstat').style.display = 'none';
    246 	  document.querySelector('#searchwrapper').style.display = 'none';
    247 	  document.querySelector('#redeem').style.display = 'none';
    248 	});
    249         setTimeout(function() {
    250 	  var elementHeight = page.evaluate(function(){
    251 	    return $("#sidebar").height();
    252 	  });
    253 
    254 	  page.clipRect = {
    255 	    top:    clipRect.top,
    256 	    left:   clipRect.left,
    257 	    width:  clipRect.width,
    258 	    height: elementHeight
    259 	  }
    260 	  setTimeout(function() {s(filepath)}, "1000");
    261 	}, "2000");
    262       },
    263       error: function () {
    264 	var clipRect = page.evaluate(function(){
    265 	  return document.querySelector('#sidebar').getBoundingClientRect();
    266 	});
    267 
    268         setTimeout(function() {
    269 	  var elementHeight = page.evaluate(function(){
    270 	    return $("#sidebar").height();
    271 	  });
    272 
    273 	  page.clipRect = {
    274 	    top:    clipRect.top,
    275 	    left:   clipRect.left,
    276 	    width:  clipRect.width,
    277 	    height: elementHeight
    278 	  }
    279 	  setTimeout(function() {s(filepath)}, "1000");
    280 	}, "2000");
    281       }
    282     });
    283   }, "1000");
    284 }
    285 
    286 function portalinfoText(){
    287   setTimeout(function() {
    288     waitFor({
    289       timeout: 240000,
    290       check: function () {
    291         return page.evaluate(function() {
    292           if ((document.querySelector('.map').textContent.indexOf('done') != -1) || (document.getElementById("resodetails").rows[0]))  {
    293             return true;
    294           }else{
    295             console.log('generateFakeOutput')
    296             return false;
    297           }
    298         });
    299       },
    300       success: function () {
    301 	var PortalName = page.evaluate(function(){
    302 	  return document.getElementById("portaldetails").getElementsByClassName("title")[0].innerHTML;
    303 	});
    304 	var reso1 = page.evaluate(function(){
    305 	  return document.getElementById("resodetails").rows[0].cells[1].firstElementChild.getAttribute("title");
    306 	});
    307 	var reso2 = page.evaluate(function(){
    308 	  return document.getElementById("resodetails").rows[0].cells[2].firstElementChild.getAttribute("title");
    309 	});
    310 	var reso3 = page.evaluate(function(){
    311 	  return document.getElementById("resodetails").rows[1].cells[1].firstElementChild.getAttribute("title");
    312 	});
    313 	var reso4 = page.evaluate(function(){
    314 	  return document.getElementById("resodetails").rows[1].cells[2].firstElementChild.getAttribute("title");
    315 	});
    316 	var reso5 = page.evaluate(function(){
    317 	  return document.getElementById("resodetails").rows[2].cells[1].firstElementChild.getAttribute("title");
    318 	});
    319 	var reso6 = page.evaluate(function(){
    320 	  return document.getElementById("resodetails").rows[2].cells[2].firstElementChild.getAttribute("title");
    321 	});
    322 	var reso7 = page.evaluate(function(){
    323 	  return document.getElementById("resodetails").rows[3].cells[1].firstElementChild.getAttribute("title");
    324 	});
    325 	var reso8 = page.evaluate(function(){
    326 	  return document.getElementById("resodetails").rows[3].cells[2].firstElementChild.getAttribute("title");
    327 	});
    328 	var text = PortalName.replace(/(?:\r\n|\r|\n)/g, '<br />').replace(/(?:\t)/g, ' ') + "<br /><br /><b>Resonator 1:</b><br />" + reso1.replace(/(?:\r\n|\r|\n)/g, '<br />').replace(/(?:\t)/g, ' ') + "<br /><b>Resonator 2:</b><br />" + reso2.replace(/(?:\r\n|\r|\n)/g, '<br />').replace(/(?:\t)/g, ' ') + "<br /><b>Resonator 3:</b><br />" + reso3.replace(/(?:\r\n|\r|\n)/g, '<br />').replace(/(?:\t)/g, ' ') + "<br /><b>Resonator 4:</b><br />" + reso4.replace(/(?:\r\n|\r|\n)/g, '<br />').replace(/(?:\t)/g, ' ') + "<br /><b>Resonator 5:</b><br />" + reso5.replace(/(?:\r\n|\r|\n)/g, '<br />').replace(/(?:\t)/g, ' ') + "<br /><b>Resonator 6:</b><br />" + reso6.replace(/(?:\r\n|\r|\n)/g, '<br />').replace(/(?:\t)/g, ' ') + "<br /><b>Resonator 7:</b><br />" + reso7.replace(/(?:\r\n|\r|\n)/g, '<br />').replace(/(?:\t)/g, ' ') + "<br /><b>Resonator 8:</b><br />" + reso8.replace(/(?:\r\n|\r|\n)/g, '<br />').replace(/(?:\t)/g, ' ') 
    329 	console.log(text)
    330 	fs.write(portalinfoResponse, text, 'w');
    331         var startTime = new Date().getTime();
    332 	var startTime = new Date().getTime();
    333 	var interval = setInterval(function(){
    334 	  if(new Date().getTime() - startTime > 5000){
    335 	    clearInterval(interval);
    336 	    phantom.exit(0);
    337 	    return;
    338 	  }
    339 	  console.log('doSomeOutput')
    340 	}, 1000);
    341       },
    342       error: function () {
    343 	var PortalName = page.evaluate(function(){
    344 	  return document.getElementById("portaldetails").getElementsByClassName("title")[0].innerHTML;
    345 	});
    346 	var reso1 = page.evaluate(function(){
    347 	  return document.getElementById("resodetails").rows[0].cells[1].firstElementChild.getAttribute("title");
    348 	});
    349 	var reso2 = page.evaluate(function(){
    350 	  return document.getElementById("resodetails").rows[0].cells[2].firstElementChild.getAttribute("title");
    351 	});
    352 	var reso3 = page.evaluate(function(){
    353 	  return document.getElementById("resodetails").rows[1].cells[1].firstElementChild.getAttribute("title");
    354 	});
    355 	var reso4 = page.evaluate(function(){
    356 	  return document.getElementById("resodetails").rows[1].cells[2].firstElementChild.getAttribute("title");
    357 	});
    358 	var reso5 = page.evaluate(function(){
    359 	  return document.getElementById("resodetails").rows[2].cells[1].firstElementChild.getAttribute("title");
    360 	});
    361 	var reso6 = page.evaluate(function(){
    362 	  return document.getElementById("resodetails").rows[2].cells[2].firstElementChild.getAttribute("title");
    363 	});
    364 	var reso7 = page.evaluate(function(){
    365 	  return document.getElementById("resodetails").rows[3].cells[1].firstElementChild.getAttribute("title");
    366 	});
    367 	var reso8 = page.evaluate(function(){
    368 	  return document.getElementById("resodetails").rows[3].cells[2].firstElementChild.getAttribute("title");
    369 	});
    370 	var text = PortalName.replace(/(?:\r\n|\r|\n)/g, '<br />').replace(/(?:\t)/g, ' ') + "<br /><br /><b>Resonator 1:</b><br />" + reso1.replace(/(?:\r\n|\r|\n)/g, '<br />').replace(/(?:\t)/g, ' ') + "<br /><b>Resonator 2:</b><br />" + reso2.replace(/(?:\r\n|\r|\n)/g, '<br />').replace(/(?:\t)/g, ' ') + "<br /><b>Resonator 3:</b><br />" + reso3.replace(/(?:\r\n|\r|\n)/g, '<br />').replace(/(?:\t)/g, ' ') + "<br /><b>Resonator 4:</b><br />" + reso4.replace(/(?:\r\n|\r|\n)/g, '<br />').replace(/(?:\t)/g, ' ') + "<br /><b>Resonator 5:</b><br />" + reso5.replace(/(?:\r\n|\r|\n)/g, '<br />').replace(/(?:\t)/g, ' ') + "<br /><b>Resonator 6:</b><br />" + reso6.replace(/(?:\r\n|\r|\n)/g, '<br />').replace(/(?:\t)/g, ' ') + "<br /><b>Resonator 7:</b><br />" + reso7.replace(/(?:\r\n|\r|\n)/g, '<br />').replace(/(?:\t)/g, ' ') + "<br /><b>Resonator 8:</b><br />" + reso8.replace(/(?:\r\n|\r|\n)/g, '<br />').replace(/(?:\t)/g, ' ') 
    371 	console.log(text)
    372 	fs.write(portalinfoResponse, text.replace(/'/g, ''), 'w');
    373         var startTime = new Date().getTime();
    374         var startTime = new Date().getTime();
    375         var interval = setInterval(function(){
    376           if(new Date().getTime() - startTime > 5000){
    377             clearInterval(interval);
    378             phantom.exit(0);
    379             return;
    380           }
    381           console.log('doSomeOutput')
    382         }, 1000);
    383       }
    384     });
    385   }, "1000");
    386 }
    387 
    388 function afterLogin(url, search, mode) {
    389   page.viewportSize = { width: '1280', height: '720' };
    390   page.open(url, function(status) {
    391     console.log(url)
    392     if (status !== 'success') {console.log('unable to connect to remote server after Login'); phantom.exit(0);}
    393     if (!isSignedIn()) {
    394       if(mode =="cookie"){
    395         if(fs.exists(cookiespath)) {
    396           fs.remove(cookiespath);
    397         }
    398       }
    399       console.log("not logged in")
    400       quit();
    401     }
    402     setTimeout(function() {
    403       if(mode == "plain"){
    404         storeCookies();
    405       }
    406       setupIITC()
    407       if(screenshotfunction == "map"){
    408         map(search);
    409       }else if (screenshotfunction == "portalinfoScreen"){
    410         portalinfoScreen();
    411       }else if (screenshotfunction == "portalinfoText"){
    412         portalinfoText();
    413       }
    414     }, "1000");
    415   });
    416 }
    417 
    418 function loadIitcPlugin(src) {
    419   page.evaluate(function(src) {
    420     var script = document.createElement('script');
    421     script.type='text/javascript';
    422     script.src=src;
    423     document.head.insertBefore(script, document.head.lastChild);
    424   }, src);
    425 }
    426 
    427 function loadLocalIitcPlugin(src) {
    428     page.injectJs(src)
    429 }
    430 
    431 function searchfunc(search){
    432   page.evaluate(function(search, zoomlevel) {
    433     if (document.querySelector('#search')){
    434       window.addHook('search', function(query) {
    435         var checkExist = setInterval(function() {
    436           if (query.results.length > 0) {
    437             map.fitBounds(query.results[0].bounds, {maxZoom: 17})
    438             clearInterval(checkExist);
    439           }
    440           if (typeof zoomlevel !== 'undefined' || zoomlevel !== null) {
    441             console.log(zoomlevel)
    442             window.map.setZoom(zoomlevel,animate=false)
    443           }
    444         }, 100);
    445       });
    446       setTimeout(function() {
    447         window.search.doSearch(search, true)
    448       }, 2000);
    449     }
    450   }, search, zoomlevel);
    451 }
    452 
    453 function setupIITC(){
    454   loadIitcPlugin('https://static.iitc.me/build/release/plugins/canvas-render.user.js');
    455   page.evaluate(function(maptype) {
    456     localStorage['ingress.intelmap.layergroupdisplayed'] = JSON.stringify({
    457       "Unclaimed/Placeholder Portals": false,
    458       "Level 1 Portals": true,
    459       "Level 2 Portals": true,
    460       "Level 3 Portals": true,
    461       "Level 4 Portals": true,
    462       "Level 5 Portals": true,
    463       "Level 6 Portals": true,
    464       "Level 7 Portals": true,
    465       "Level 8 Portals": true,
    466       "Fields": true,
    467       "Links": true,
    468       "Resistance": true,
    469       "Enlightened": true,
    470       "DEBUG Data Tiles":false,
    471       "Artifacts":true,
    472       "Ornaments":true
    473     });
    474     var script = document.createElement('script');
    475     script.type='text/javascript';
    476     script.src='https://static.iitc.me/build/test/total-conversion-build.user.js';
    477     document.head.insertBefore(script, document.head.lastChild);
    478     if (maptype == "intel") {
    479       localStorage['iitc-base-map'] = 'Google Default Ingress Map';
    480     }else {
    481       localStorage['iitc-base-map'] = 'Google Roads';
    482     }
    483   }, maptype);
    484   if (maptype != "intel") {
    485     for(var i in plugins){
    486       var plugin = plugins[i];
    487       if(plugin.match('(http(s)?:\/\/)')){
    488         loadIitcPlugin(plugin);
    489       }else{
    490         loadLocalIitcPlugin(plugin);
    491       }
    492     }
    493   }
    494 }
    495 
    496 function s(file) {
    497   console.log('SCREENSHOT')
    498   page.render(file);
    499   var startTime = new Date().getTime();
    500   var startTime = new Date().getTime();
    501   var interval = setInterval(function(){
    502     if(new Date().getTime() - startTime > 5000){
    503       clearInterval(interval);
    504       phantom.exit(0);
    505       return;
    506     }
    507     console.log('doSomeOutput')
    508   }, 1000);
    509 }
    510 
    511 function hideDebris() {
    512   window.setTimeout(function() {
    513     page.evaluate(function() {
    514       if (document.querySelector('#chat'))                      {document.querySelector('#chat').style.display = 'none';}
    515       if (document.querySelector('#chatcontrols'))              {document.querySelector('#chatcontrols').style.display = 'none';}
    516       if (document.querySelector('#chatinput'))                 {document.querySelector('#chatinput').style.display = 'none';}
    517       if (document.querySelector('#updatestatus'))              {document.querySelector('#updatestatus').style.display = 'none';}
    518       if (document.querySelector('#sidebartoggle'))             {document.querySelector('#sidebartoggle').style.display = 'none';}
    519       if (document.querySelector('#scrollwrapper'))             {document.querySelector('#scrollwrapper').style.display = 'none';}
    520       if (document.querySelector('.leaflet-control-container')) {document.querySelector('.leaflet-control-container').style.display = 'none';}
    521       if (document.querySelector('#portal_highlight_select')) {document.querySelector('#portal_highlight_select').style.display = 'none';}
    522     });
    523   }, 200);
    524 }
    525 
    526 function prepare(widthz, heightz) {
    527     window.setTimeout(function() {
    528         page.evaluate(function(w, h) {
    529             var water = document.createElement('p');
    530             water.id='viewport-ice';
    531             water.style.position = 'absolute';
    532             water.style.top = '0';
    533             water.style.marginTop = '0';
    534             water.style.paddingTop = '0';
    535             water.style.left = '0';
    536             water.style.width = w + 'px';
    537             water.style.height = h + 'px';
    538             document.querySelectorAll('body')[0].appendChild(water);
    539         }, widthz, heightz);
    540         var selector = "#viewport-ice";
    541         setElementBounds(selector);
    542     }, 500);
    543 }
    544 
    545 
    546 function setElementBounds(selector) {
    547   page.clipRect = page.evaluate(function(selector) {
    548     var clipRect = document.querySelector(selector).getBoundingClientRect();
    549     return {
    550       top:    clipRect.top,
    551       left:   clipRect.left,
    552       width:  clipRect.width,
    553       height: clipRect.height
    554     };
    555   }, selector);
    556 }
    557 
    558 function getDateTime(format) {
    559   var now     = new Date();
    560   var year    = now.getFullYear();
    561   var month   = now.getMonth()+1;
    562   var day     = now.getDate();
    563   var hour    = now.getHours();
    564   var minute  = now.getMinutes();
    565   var second  = now.getSeconds();
    566   var timeZone = '';
    567   if(month.toString().length === 1) {
    568     month = '0' + month;
    569   }
    570   if(day.toString().length === 1) {
    571     day = '0' + day;
    572   }
    573   if(hour.toString().length === 1) {
    574     hour = '0' + hour;
    575   }
    576   if(minute.toString().length === 1) {
    577     minute = '0' + minute;
    578   }
    579   if(second.toString().length === 1) {
    580     second = '0' + second;
    581   }
    582   var dateTime;
    583   if (format === 1) {
    584     dateTime = year + '-' + month + '-' + day + '--' + hour + '-' + minute + '-' + second;
    585   } else {
    586     dateTime = day + '.' + month + '.' + year + ' ' + hour + ':' + minute + ':' + second + timeZone;
    587   }
    588   return dateTime;
    589 }
    590 
    591 function addTimestamp(time) {
    592   if (search == "nix") {
    593     if (maptype == "iitc") {
    594       page.evaluate(function(dateTime, search) {
    595         var water = document.createElement('p');
    596 	water.id='watermark-ice';
    597 	water.innerHTML = dateTime;
    598 	water.style.position = 'absolute';
    599 	water.style.color = '#3A539B';
    600 	water.style.top = '0';
    601 	water.style.zIndex = '4404';
    602 	water.style.marginTop = '0';
    603 	water.style.paddingTop = '0';
    604 	water.style.left = '0';
    605 	water.style.fontSize = '30px';
    606 	water.style.opacity = '0.8';
    607 	water.style.fontFamily = 'monospace';
    608 	water.style.textShadow = '0px 1px 8px rgba(150, 150, 150, 1)';
    609 	document.querySelectorAll('body')[0].appendChild(water);
    610       }, time, search);
    611     }else {
    612       page.evaluate(function(dateTime, search) {
    613         var water = document.createElement('p');
    614         water.id='watermark-ice';
    615         water.style.zIndex = '4404';
    616         water.innerHTML = dateTime;
    617         water.style.position = 'absolute';
    618         water.style.color = 'orange';
    619         water.style.top = '0';
    620         water.style.left = '0';
    621         water.style.fontSize = '30px';
    622         water.style.opacity = '0.8';
    623         water.style.marginTop = '0';
    624         water.style.paddingTop = '0';
    625         water.style.fontFamily = 'monospace';
    626         water.style.textShadow = '0px 1px 8px rgba(150, 150, 150, 1)';
    627         document.querySelectorAll('body')[0].appendChild(water);
    628       }, time, search);
    629     }
    630   }else{
    631     if (maptype == "iitc") {
    632       page.evaluate(function(dateTime, search) {
    633         var water = document.createElement('p');
    634         water.id='watermark-ice';
    635         water.innerHTML = dateTime + ' - ' + search;
    636         water.style.position = 'absolute';
    637         water.style.color = '#3A539B';
    638         water.style.top = '0';
    639         water.style.zIndex = '4404';
    640         water.style.marginTop = '0';
    641         water.style.paddingTop = '0';
    642         water.style.left = '0';
    643         water.style.fontSize = '30px';
    644         water.style.opacity = '0.8';
    645         water.style.fontFamily = 'monospace';
    646         water.style.textShadow = '0px 1px 8px rgba(150, 150, 150, 1)';
    647         document.querySelectorAll('body')[0].appendChild(water);
    648       }, time, search);
    649     }else {
    650       page.evaluate(function(dateTime, search) {
    651         var water = document.createElement('p');
    652         water.id='watermark-ice';
    653         water.style.zIndex = '4404';
    654         water.innerHTML = dateTime + ' - ' + search;
    655         water.style.position = 'absolute';
    656         water.style.color = 'orange';
    657         water.style.top = '0';
    658         water.style.left = '0';
    659         water.style.fontSize = '30px';
    660         water.style.opacity = '0.8';
    661         water.style.marginTop = '0';
    662         water.style.paddingTop = '0';
    663         water.style.fontFamily = 'monospace';
    664         water.style.textShadow = '0px 1px 8px rgba(150, 150, 150, 1)';
    665         document.querySelectorAll('body')[0].appendChild(water);
    666       }, time, search);
    667     }
    668   }
    669 }
    670 
    671 /**
    672  * Main function.
    673  */
    674 function main() {
    675   page.evaluate(function() {
    676     if (document.getElementById('watermark-ice')) {
    677       var oldStamp = document.getElementById('watermark-ice');
    678       oldStamp.parentNode.removeChild(oldStamp);
    679     }
    680   });
    681   window.setTimeout(function() {
    682     addTimestamp(getDateTime(0));
    683     file = filepath;
    684     s(file);
    685   }, 400);
    686 }