Scrape Site for JS Errors with Casper.js
I recently needed to make reorganize javascript files on a huge Rails app. I wanted to be sure that I had not broken javascript dependancies with the reorganization, so I needed to crawl the site for js errors each time I restructured the load strategy for js.
I ended up using CasperJs to accomplish this. It was pretty easy.
First install Casper
brew install casperjs
This is what my script ended up looking like
var casper = require('casper').create();
var errors = [];
// log into the site first
casper.start('http://localhost:3000', function() {
this.fill('form[action="/session"]',
{
'login[email]': 'username',
'login[password]': 'password'
}, true);
});
// add as many pages as you would like...
casper.thenOpen('http:localhost:3000/accounts/1/products');
casper.on("page.error", function(msg, trace) {
this.echo("Error: " + msg, "ERROR");
this.echo("file: " + trace[0].file, "WARNING");
this.echo("line: " + trace[0].line, "WARNING");
this.echo("function: " + trace[0]["function"], "WARNING");
errors.push(msg);
});
casper.run(function() {
if (errors.length > 0) {
this.echo(errors.length + ' Javascript errors found', "WARNING");
} else {
this.echo(errors.length + ' Javascript errors found', "INFO");
}
casper.exit();
});
Then run the script, in my case I called it "check_for_errors.js"
casperjs check_for_errors.js
The script will output any errros found on the pages you hit.
Written by David Morrow
Related protips
5 Responses
s/CaserJS/CasperJS :)
@n1k0 thanks! have fixed. Love your library, the docs are fantastic!!
@dperrymorrow thanks!
PS: you've fixed it as "CapserJS" ;)
Thanks for sharing! Often it's also handy to check if any external resources failed to load:
casper.on('resource.received', function(resource) {
var status = resource.status;
if(status >= 400) {
casper.log('Resource ' + resource.url + ' failed to load (' + status + ')', 'error');
resourceErrors.push({
url: resource.url,
status: resource.status
});
}
});Nice!
@chrisullyott - I don't see why you couldn't
Have a fresh tip? Share with Coderwall community!
JavaScript on a page runs with the privileges of that origin. One altered library, tag manager, or snippet can read inputs, change what people see, and call your APIs as the user.
Security insights from Cside