Phantom JS是一个服务器端的 JavaScript API 的 WebKit。其支持各种Web标准: DOM 处理, CSS 选择器, JSON, Canvas, 和 SVG,解压到任意目录,并将包含phantomjs.exe的目录添加到系统路径。
PhantomJS 是一个基于 WebKit 的服务器端 JavaScript API。它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准: DOM 处理, CSS 选择器, JSON, Canvas, 和 SVG。 PhantomJS 可以用于 页面自动化 , 网络监测 , 网页截屏 ,以及 无界面测试 等。
自行选择对应 版本下载解压即可( 为方便使用,可自已为phantomjs设置环境变量 ),其中带有一个example文件夹,里面有很多已经写好的代码供使用。本文假设phantomjs已经安装好并已设置了环境变量。
无需浏览器的 Web 测试
页面访问自动化
屏幕捕获
网络监控.
之前的例子中我们已经初步认识了phantom对象。它的功能是定义和控制phantom运行环境的参数和流程。关键的API有:
phantom.args String[]
获取传给本JS程序的参数,需要与 system.args 进行区分(system模块详见下文),后者表示传给phantomjs引擎的参数。例如 phantomjs ./test.js http://baidu.com 这句语句,通过 phantom.args ,我们能得到的参数列表为["http://baidu.com"] ,而通过 system.args 则得到 ["./test.js", "http://baidu.com"] 这样的参数列表。差异就在于是否包含当前脚本名称。不过 phantom.scriptName 这个API提供了获取脚本名称的功能。
phantom.cookies Object[]
获取或设置cookies,不过对于设置建议使用其他的API完成。同时相关的API还有:
phantom.addCookie(Object) Boolean:添加cookie值
phantom.deleteCookie(cookieName) Boolean:删除指定Cookie值
phantom.clearCookies() :清空所有的cookie
phantom.cookiesEnabled Boolean:获取或设置是否支持cookie
phantom.injectJs(fileName) Boolean:
把指定的外部JS文件注入到当前环境。执行这个方法时,phantomjs首先会从当前目录检索此文件,如果找不到,则再到 phantom.libraryPath 指定的路径寻找。 phantom.libraryPath 这个API基本上就是为 phantom.injectJs() 服务的。
phantom.onError
当页面存在js错误,且没有被 page.onError 处理,则会被此handler捕获。下面是使用此API的一个例子。由于phantom环境下代码调试很困难,了解这些错误捕获的API也许会对我们的实际使用有所帮助。
phantom.onError = function(msg, trace) { var msgStack = ['PHANTOM ERROR: ' + msg]; if (trace && trace.length) { msgStack.push('TRACE:'); trace.forEach(function(t) { msgStack.push(' -> ' + (t.file || t.sourceURL) + ': ' + t.line + (t.function ? ' (in function ' + t.function +')' : '')); }); } console.error(msgStack.join(' ')); phantom.exit(1); };
phantom.exit(returnValue)
这个API已经见过多次了,它的作用是退出程序,可以设置一个退出代码,默认是0。