PhantomJS是一个服务器端的 JavaScript API 的 WebKit,支持各种Web标准: DOM 处理, CSS 选择器, JSON, Canvas, SVG

PhantomJS is a headless WebKit scriptable with a JavaScript API. It has fast and native support for various web standards: DOM handling, CSS selector, JSON, Canvas, and SVG.

PhantomJS 介绍

1)一个基于webkit内核的无头浏览器,没有UI界面,即它就是一个浏览器,只是其内的点击、翻页等人为相关操作需要程序设计实现

2)提供JavaScript API接口,即通过编写js程序可以直接与webkit内核交互,在此之上可以结合Java语言等,通过java调用js等相关操作,从而解决了以前c/c++才能比较好的基于webkit开发优质采集器的限制

3)提供Windows、Linux、Mac等不同os的安装使用包,也就是说可以在不同平台上二次开发采集项目或是自动项目测试等工作

PhantomJS 官网: http://phantomjs.org

 

使用场景:

  • 无需浏览器的 Web 测试

  • 页面访问自动化

  • 屏幕捕获

  • 网络监控

屏幕捕获示例代码:

var page = require('webpage').create();
page.open('http://mimvp.com/', function() {
  page.render('github.png');
  phantom.exit();
});

 

PhantomJS 生态环境:

  • CasperJS enables easy navigation scripting and common high-level testing.

  • Poltergeist allows running Capybara tests headlessly.

  • Guard::Jasmine automatically tests Jasmine specs on Rails when files are modified.

  • GhostDriver complements Selenium tests with a PhantomJS WebDriver implementation.

  • PhantomRobot runs Robot Framework acceptance tests in the background via PhantomJS.

  • Mocha-PhantomJS run Mocha tests using PhantomJS.

  • 其他一些相关项目

 

PhantomJS 常用API

1)常用内置几大对象

var system = require('system');     // 获得系统操作对象,包括命令行参数、phantomjs系统设置等信息
var page = require('webpage');   // 获取操作dom或web网页的对象,通过它可以打开网页、接收网页内容、request、response参数,其为最核心对象。
var fs = require('fs');    // 获取文件系统对象,通过它可以操作操作系统的文件操作,包括read、write、move、copy、delete等。

 

2) 常用API

page.open(url,function (status) {}    // 通过page对象打开url链接,并可以回调其声明的回调函数,其回调发生的时机为该URL被彻底打开完毕,即该URL所引发的请求项被全部加载完,但ajax请求是与它的加载完成与否没有关系

page.onLoadStarted = function() {}    // 当page.open调用时,回首先执行该函数,在此可以预置一些参数或函数,用于后边的回调函数中

page.onResourceError = function(resourceError) {}    // page的所要加载的资源在加载过程中,出现了各种失败,则在此回调处理

page.onResourceRequested = function(requestData, networkRequest) {}    // page的所要加载的资源在发起请求时,都可以回调该函数

page.onResourceReceived = function(response) {}    // page的所要加载的资源在加载过程中,每加载一个相关资源,都会在此先做出响应,它相当于http头部分,  其核心回调对象为response