转自: http://www.woiweb.net/phantomjs-quick-use-tutorials.htmljavascript
安装包下载地址:http://phantomjs.org/download.html,包括Windows,Mac OS,Linux版本,自行选择对应 版本下载解压便可(为方便使用,可自已为phantomjs设置环境变量),其中带有一个example文件夹,里面有不少已经写好的代码供使用。本文假设phantomjs已经安装好并已设置了环境变量。html
新建一个包含下面两行脚本的文本文件:java
console.log('Hello, world!'); phantom.exit();
将文件另存为hello.js
,而后执行它:jquery
第一行将会在终端打印出字符串,第二行phantom.exit
将退出运行。
在该脚本中调用phantom.exit
是很是重要的,不然 PhantomJS 将根本不会中止。git
Phantomjs如何传递参数呢?以下所示 :github
phantomjs examples/arguments.js foo bar baz
其中的foo, bar, baz就是要传递的参数,如何获取呢:web
var system = require('system'); if (system.args.length === 1) { console.log('Try to pass some args when invoking this script!'); } else { system.args.forEach(function (arg, i) { console.log(i + ': ' + arg); }); } phantom.exit();
它将输出 : 0: foo 1: bar 2: baz
经过建立一个网页对象,一个网页能够被加载,分析和渲染。ajax
下面的脚本将示例页面对象最简单的用法,它加载 example.com 而且将它保存为一张图片,example.png
swift
因为它的这个特性,PhantomJS 能够用来网页截屏,截取一些内容的快照,好比将网页、SVG存成图片,PDF等,这个功能很牛X。windows
接下来的loadspeed.js
脚本加载一个特殊的URL (不要忘了http协议) 而且计量加载该页面的时间。
var page = require('webpage').create(), system = require('system'), t, address; if (system.args.length === 1) { console.log('Usage: loadspeed.js <some URL>'); phantom.exit(); } t = Date.now(); address = system.args[1]; page.open(address, function (status) { if (status !== 'success') { console.log('FAIL to load the address'); } else { t = Date.now() - t; console.log('<a title="Loading" href="http://www.woiweb.net/tag/loading">Loading</a> time ' + t + ' msec'); } phantom.exit(); });
在命令行运行该脚本:
它输出像下面的东西:
Loading http://www.google.com Loading time 719 msec
要想在网页的上下文中对JavaScript 或 CoffeeScript 进行运算,使用evaluate()
方法。代码是在“沙箱”中运行的,它没有办法读取在其所属页面上下文以外的任何JavaScript对象和变量。evaluate()
会返回一个对象,然而它仅限制于简单的对象而且不能包含方法或闭包。
这有一个示例来显示网页标题:
任何来自于网页而且包括来自evaluate()
内部代码的控制台信息,默认不会显示的。要重写这个行为,使用onConsoleMessage
回调函数,前一个示例能够被改写成:
因为脚本好像是一个Web浏览器上运行的同样,标准的DOM脚本和CSS选择器能够很好的工做。这使得PhantomJS适合支持各类页面自动化任务。
下面的 useragent.js
将读取id 为myagent的元素的 textContent
属性:
上面示例一样提供了一种自定义user agent
的方法。
使用JQuery及其余类库:
将一个页面从一台远程服务器请求一个资源的时候,请求和响应都可以经过onResourceRequested
和 onResourceReceived
回调方法追踪到。示例 netlog.js:
获取如何把该特性用于HAR 输出以及基于YSlow的性能分析的更多信息,请参阅网络监控页面。
PhantomJs官网:http://phantomjs.org/