- Web Page Module
addCookie
var webPage = require('webpage');
var page = webPage.create();
phantom.addCookie({
'name' : 'Valid-Cookie-Name', /* required property */
'value' : 'Valid-Cookie-Value', /* required property */
'domain' : 'localhost',
'path' : '/foo', /* required property */
'httponly' : true,
'secure' : false,
'expires' : (new Date()).getTime() + (1000 * 60 * 60) /* <-- expires in 1 hour */
});
childFramesCount
childFramesName
clearCookies
close
currentFrameName
deleteCookie
var webPage = require('webpage');
var page = webPage.create();
page.deleteCookie('Added-Cookie-Name');
evaluateAsync
var webPage = require('webpage');
var page = webPage.create();
page.open("", function(status) {
page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
page.evaluateAsync(function() {
$.ajax({url: "api1", success: function() {}});
});
page.evaluateAsync(function(apiUrl) {
$.ajax({url: apiUrl, success: function() {}});
}, 1000, "api2");
});
});
evaluateJavaScript
var webPage = require('webpage');
var page = webPage.create();
page.onConsoleMessage = function(msg) {
console.log('The web page said: ' + msg);
};
page.open('http://phantomjs.org/', function(status) {
var script1 = "function(){ window.phantomVar='phantomjs made me do it!'; }";
var script2 = "function(){ console.log(window.phantomVar); }";
page.evaluateJavaScript(script1);
page.evaluateJavaScript(script2);
phantom.exit();
});
var webPage = require('webpage');
var page = webPage.create();
page.onConsoleMessage = function(msg) {
console.log('CONSOLE: ' + msg);
};
page.open('http://phantomjs.org/', function(status) {
var logoUrl = page.evaluateJavaScript('function(){return document.body.querySelector("img").src;}');
console.log(logoUrl); // http://phantomjs.org/img/phantomjs-logo.png
phantom.exit();
});
evaluate
var webPage = require('webpage');
var page = webPage.create();
page.open('http://m.bing.com', function(status) {
var title = page.evaluate(function() {
return document.title;
});
console.log(title);
phantom.exit();
});
page.open('http://m.bing.com', function(status) {
var title = page.evaluate(function(s) {
return document.querySelector(s).innerText;
}, 'title');
console.log(title);
phantom.exit();
});
var webPage = require('webpage');
var page = webPage.create();
page.onConsoleMessage = function(msg) {
console.log(msg);
}
page.open('http://m.bing.com', function(status) {
page.evaluate(function() {
console.log(document.title);
});
phantom.exit();
});
getPage
goBack
goForward
go
includeJs
var webPage = require('webpage');
var page = webPage.create();
page.includeJs(
// Include the https version, you can change this to http if you like.
'https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js',
function() {
(page.evaluate(function() {
// jQuery is loaded, now manipulate the DOM
var $loginForm = $('form#login');
$loginForm.find('input[name="username"]').value('phantomjs');
$loginForm.find('input[name="password"]').value('c45p3r');
}))
}
);
injectJs
var webPage = require('webpage');
var page = webPage.create();
page.open('http://www.phantomjs.org', function(status) {
if (status === "success") {
page.includeJs('http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js', function() {
if (page.injectJs('do.js')) {
var title = page.evaluate(function() {
// returnTitle is a function loaded from our do.js file - see below
return returnTitle();
});
console.log(title);
phantom.exit();
}
});
}
});
do.js
window.returnTitle = function() {
return document.title;
};
openUrl
open
var webPage = require('webpage');
var page = webPage.create();
page.open('http://www.google.com/', function(status) {
console.log('Status: ' + status);
// Do other things here...
});
var webPage = require('webpage');
var page = webPage.create();
var postBody = 'user=username&password=password';
page.open('http://www.google.com/', 'POST', postBody, function(status) {
console.log('Status: ' + status);
// Do other things here...
});
var webPage = require('webpage');
var page = webPage.create();
var settings = {
operation: "POST",
encoding: "utf8",
headers: {
"Content-Type": "application/json"
},
data: JSON.stringify({
some: "data",
another: ["custom", "data"]
})
};
page.open('http://your.custom.api', settings, function(status) {
console.log('Status: ' + status);
// Do other things here...
});
release
reload
renderBase64
var webPage = require('webpage');
var page = webPage.create();
page.viewportSize = {
width: 1920,
height: 1080
};
page.open('http://phantomjs.org', function (status) {
var base64 = page.renderBase64('PNG');
console.log(base64);
phantom.exit();
});
renderBuffer
var server = require('webserver').create();
var listening = server.listen(8001, function(request, response) {
var url = "http://phantomjs.org", format = 'png', quality = -1;
var page = require('webpage').create();
page.viewportSize = {
width: 800,
height: 600
};
page.open(url, function start(status) {
// Buffer is an Uint8ClampedArray
var buffer = page.renderBuffer(format, quality);
response.statusCode = 200;
response.headers = {
"Cache": "no-cache",
"Content-Type": "image/" + format
};
page.close();
// Pass the Buffer to 'write' to send the Uint8ClampedArray to the client
response.write(buffer);
response.close();
});
});
render
var webPage = require('webpage');
var page = webPage.create();
page.viewportSize = { width: 1920, height: 1080 };
page.open("http://www.google.com", function start(status) {
page.render('google_home.jpeg', {format: 'jpeg', quality: '100'});
phantom.exit();
});
sendEvent
var webPage = require('webpage');
var page = webPage.create();
page.sendEvent('keypress', page.event.key.A, null, null, 0x02000000 | 0x08000000);
setContent
var webPage = require('webpage');
var page = webPage.create();
var expectedContent = '<html><body><div>Test div</div></body></html>';
var expectedLocation = 'http://www.phantomjs.org/';
page.setContent(expectedContent, expectedLocation);
stop
switchToChildFrame
switchToFocusedFrame
switchToFrame
switchToMainFrame
switchToParentFrame
uploadFile
var webPage = require('webpage');
var page = webPage.create();
page.uploadFile('input[name=image]', '/path/to/some/photo.jpg');
Callback Triggers
closing(page)
initialized()
javaScriptAlertSent(message)
javaScriptConsoleMessageSent(message)
loadFinished(status)
loadStarted()
navigationRequested(url, navigationType, navigationLocked, isMainFrame)
rawPageCreated(page)
resourceError(resource)
resourceReceived(request)
resourceRequested(resource)
urlChanged(url)
onAlert
var webPage = require('webpage');
var page = webPage.create();
page.onAlert = function(msg) {
console.log('ALERT: ' + msg);
};
onCallback
onClosing
var webPage = require('webpage');
var page = webPage.create();
page.onClosing = function(closingPage) {
console.log('The page is closing! URL: ' + closingPage.url);
};
onConfirm
var webPage = require('webpage');
var page = webPage.create();
page.onConfirm = function(msg) {
console.log('CONFIRM: ' + msg);
return true; // `true` === pressing the "OK" button, `false` === pressing the "Cancel" button
};
onConsoleMessage
var webPage = require('webpage');
var page = webPage.create();
page.onConsoleMessage = function(msg, lineNum, sourceId) {
console.log('CONSOLE: ' + msg + ' (from line #' + lineNum + ' in "' + sourceId + '")');
};
onError
var webPage = require('webpage');
var page = webPage.create();
page.onError = function(msg, trace) {
var msgStack = ['ERROR: ' + msg];
if (trace && trace.length) {
msgStack.push('TRACE:');
trace.forEach(function(t) {
msgStack.push(' -> ' + t.file + ': ' + t.line + (t.function ? ' (in function "' + t.function +'")' : ''));
});
}
console.error(msgStack.join('\n'));
};
onFilePicker
var webPage = require('webpage');
var page = webPage.create();
var system = require('system');
page.onFilePicker = function(oldFile) {
if (system.os.name === 'windows') {
return 'C:\\Windows\\System32\\drivers\\etc\\hosts';
}
return '/etc/hosts';
};
onInitialized
var webPage = require('webpage');
var page = webPage.create();
page.onInitialized = function() {
page.evaluate(function() {
document.addEventListener('DOMContentLoaded', function() {
console.log('DOM content has loaded.');
}, false);
});
};
onLoadFinished
var webPage = require('webpage');
var page = webPage.create();
page.onLoadFinished = function(status) {
console.log('Status: ' + status);
// Do other things here...
};
onLoadStarted
var webPage = require('webpage');
var page = webPage.create();
page.onLoadStarted = function() {
var currentUrl = page.evaluate(function() {
return window.location.href;
});
console.log('Current page ' + currentUrl + ' will be gone...');
console.log('Now loading a new page...');
};
onNavigationRequested
var webPage = require('webpage');
var page = webPage.create();
page.onNavigationRequested = function(url, type, willNavigate, main) {
console.log('Trying to navigate to: ' + url);
console.log('Caused by: ' + type);
console.log('Will actually navigate: ' + willNavigate);
console.log('Sent from the page\'s main frame: ' + main);
}
onPageCreated
var webPage = require('webpage');
var page = webPage.create();
page.onPageCreated = function(newPage) {
console.log('A new child page was created! Its requested URL is not yet available, though.');
// Decorate
newPage.onClosing = function(closingPage) {
console.log('A child page is closing: ' + closingPage.url);
};
};
onPrompt
var webPage = require('webpage');
var page = webPage.create();
page.onPrompt = function(msg, defaultVal) {
if (msg === "What's your name?") {
return 'PhantomJS';
}
return defaultVal;
};
onResourceError
var webPage = require('webpage');
var page = webPage.create();
page.onResourceError = function(resourceError) {
console.log('Unable to load resource (#' + resourceError.id + 'URL:' + resourceError.url + ')');
console.log('Error code: ' + resourceError.errorCode + '. Description: ' + resourceError.errorString);
};
onResourceReceived
var webPage = require('webpage');
var page = webPage.create();
page.onResourceReceived = function(response) {
console.log('Response (#' + response.id + ', stage "' + response.stage + '"): ' + JSON.stringify(response));
};
onResourceRequested
var webPage = require('webpage');
var page = webPage.create();
page.onResourceRequested = function(requestData, networkRequest) {
console.log('Request (#' + requestData.id + '): ' + JSON.stringify(requestData));
};
var webPage = require('webpage');
var page = webPage.create();
page.onResourceRequested = function(requestData, networkRequest) {
var match = requestData.url.match(/wordfamily.js/g);
if (match != null) {
console.log('Request (#' + requestData.id + '): ' + JSON.stringify(requestData));
// newWordFamily.js is an alternative implementation of wordFamily.js
// and is available in local path
networkRequest.changeUrl('newWordFamily.js');
}
};
onResourceTimeout
var webPage = require('webpage');
var page = webPage.create();
page.onResourceTimeout = function(request) {
console.log('Response (#' + request.id + '): ' + JSON.stringify(request));
};
onUrlChanged
var webPage = require('webpage');
var page = webPage.create();
page.onUrlChanged = function(targetUrl) {
console.log('New URL: ' + targetUrl);
};