Skip to content

Instantly share code, notes, and snippets.

@xAlstrat
Created May 29, 2016 16:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xAlstrat/17c90cf3c6dabfd711c45d66b019ab0c to your computer and use it in GitHub Desktop.
Save xAlstrat/17c90cf3c6dabfd711c45d66b019ab0c to your computer and use it in GitHub Desktop.
CasperJS WebServer
//PhantomJS server for scraping
//define ip and port to web service
var ip_server = 'my_ip:8585';
//includes web server modules
var server = require('webserver').create();
var service;
var casperreq = require('casper');
//Save login an other cookies
function saveCookies(){
var fs = require('fs');
var cookies = JSON.stringify(phantom.cookies);
fs.write('cookies.txt', cookies, 644);
}
//Load saved cookies
function loadCookies(){
var fs = require('fs');
var data = fs.read('cookies.txt');
phantom.cookies = JSON.parse(data);
}
//Gets the specified paramameter from the url
function getParameterByName(name, url) {
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
//Processes a client request
function process_request(request, response){
if(filterRequest(request)){
response.write('Access denied.');
response.close();
return;
}
console.log('Accepted request.');
var url;
if(request.method == 'POST'){
url = request.post.url;
}
else{
url = decodeURIComponent(getParameterByName('url', request.url));
}
if(!url || url.length === 0){
response.write(JSON.stringify({status:'error', message:'No url specified'}));
response.close();
}
console.log('Trying to open: '+url);
var casper = casperreq.create({
pageSettings: {
loadImages: false,
loadPlugins: false,
userAgent: 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'
}
});
//Reloads cookies
loadCookies();
//Deactivates javascript for efficiency
casper.options.pageSettings.javascriptEnabled = false;
//Starts casper
casper.start();
//Opens the specified url
casper.thenOpen(url, function(){
});
casper.run(function(){
var html = this.getHTML();
var resp = {status: 'ok', content:html};
response.write(html);
response.close();
});
}
service = server.listen(ip_server, process_request);
console.log('Server started at http://'+ip_server);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment