PhantomJS API 第二篇

  • 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);
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章