PhantomJS AN INTRO
http://phantomjs.org/
By Taswar Bhatti
taswar@gmail.com
@taswarbhatti
WHO AM I?
I work as a Web Geek, MS .NET during the day and Linux, dynamic languages during the night :)
Author of Instant AutoMapper on Packt Publishing
WhatZ PhantomJS
PhantomJS is a headless WebKit scriptable with a JavaScript API. It has fast and native support for various web standards: DOM handing, CSS selector, JSON, Canvas and SVG
WhatZ it GOOD FOR?
- Headless WebSite Testing
- Screen Capture
- Page Automation
- Network Monitoring
INStall Version
http://phantomjs.org/download.html
Latest: 1.9.2
Windows EXE version
Mac OSX version (Homebrew or Binary)
Linux version
Latest: 1.9.2
Windows EXE version
Mac OSX version (Homebrew or Binary)
Linux version
Simple Screen Capture
var page = require('webpage').create(); page.open('http://github.com/', function () { page.render('github.png'); phantom.exit(); });
Beside PNG format, PhantomJS supports JPEG, GIF, and PDF
INcludING JQUERY
Eliminate the need to use document.getElementById
var page = require('webpage').create();
page.open('http://www.whatever.com', function() {
var jq = "http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js";
page.includeJs(jq, function() {
page.evaluate(function() { $("button").click(); //using jquery to find element }); phantom.exit() }); });
Can USE coffeeScript
system = require 'system'
if system.args.length is 1
console.log 'Try to pass some args when invoking this script!'
else
for arg, i in system.args
console.log i + ': ' + arg
phantom.exit()
Scraping DATA
var page = require('webpage').create(),
url = 'http://www.dzone.com/links/index.html';
page.open(url, function (status) {
if (status !== 'success') {
console.log('Unable to access ' + url);
} else {
page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js", function() {
var result = page.evaluate(function() {
var stories = $("a[rel='bookmark']"), a, a_txt,
news = [], i = stories.length;
for(; i >= 0; i -= 1){
a = $(stories[i]);
a_txt = a.text() || '';
if(a_txt !== '') {
news.push(a.text().trim() + " | " + a.attr('href'));
}
}
return news;
});
console.log(result.join('\n'));
phantom.exit();
});
}
});
Integrating with Languages
DEMO
Demo Ruby on Rails Screenshot
Demo Python/Ruby WebDriver Sample
More samples located at https://github.com/ariya/phantomjs
THANK YOU
Twitter: @taswarbhatti
Blog: http://taswar.zeytinsoft.com
Contact: taswar@gmail.com
PhantomJS
By Taswar Bhatti
PhantomJS
- 4,786