PhantomJS API 第二篇

来源:互联网 发布:求素数高级算法 编辑:程序博客网 时间:2024/05/18 03:23
  • 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);};