快速上手
以下介绍是假定您已安装了PhantomJS,并将其执行文件所在路径写入到系统执行PATH中。
本页展示的代码也可在以下地方找到: 各种例子 包含 PhantomJS. 同时你也可以查看Phantomjs各种应用的例子 页面自动化, 网络监测, 网页截屏, 以及 无头测试.
Hello, World!
新建一个text文件并写入下列内容:
console.log('Hello, world!');
phantom.exit();
将其另存为hello.js
, 然后在命令行窗口(command line)中执行此文件,而不是在控制台中(REPL).
REPL是一个简单的交互式计算机编程环境。 点此可详细了解REPL。 同样地, REPL是一个可执行的phantomjs.exe文件而不是 command line.
在command line中输入:
phantomjs hello.js
输出结果为:
Hello, world!
第一行,console.log
会将传递的字符串打印输出到终端。第二行,phantom.exit
将会终止执行并退出程序。
在脚本中适时地执行phantom.exit
是非常有必要的,否则PhantomJS将不会自动终止。
网页加载
可以通过创建web页面对象来加载、分析和呈现web页面
下面的脚本演示了一个页面对象最简单的使用。它先加载访问example.png
,然后将其另存为一个png图像并保存在脚本所在目录中。
var page = require('webpage').create();
page.open('http://example.com', function(status) {
console.log("Status: " + status);
if(status === "success") {
page.render('example.png');
}
phantom.exit();
});
PhantomJS可以使用渲染(rendering)特性来capture web pages,本质上是对网页内容进行截屏。
以下名为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('Loading ' + system.args[1]);
console.log('Loading time ' + t + ' msec');
}
phantom.exit();
});
使用如下方式执行脚本:
phantomjs loadspeed.js http://www.baidu.com
命令窗口会输出类似以下的结果:
Loading http://www.baidu.com
Loading time 5415 msec
代码运算
要想在所加载的网页的上下文中运行JavaScript代码,可以使用evaluate()
方法。代码是在“沙箱”中运行的,它没有办法读取在其所属页面上下文之外的任何JavaScript对象和变量。 evaluate()
会返回一个对象,然而它仅限制于简单的对象并且不能包含方法或闭包
下面是一个显示页面title的例子:
var page = require('webpage').create();
page.open(url, function(status) {
var title = page.evaluate(function() {
return document.title;
});
console.log('Page title is ' + title);
phantom.exit();
});
任何来自于所加载的网页并且包括来自evaluate()
内部代码的控制台信息,默认是不会显示的。要重写这个行为,可以使用 onConsoleMessage
回调函数,上一个示例可以被改写成:
var page = require('webpage').create();
page.onConsoleMessage = function(msg) {
console.log('Page title is ' + msg);
};
page.open(url, function(status) {
page.evaluate(function() {
console.log(document.title);
});
phantom.exit();
});
由于脚本就像运行在一个Web浏览器,标准的DOM脚本和CSS选择器可以正常使用。这使得PhantomJS对页面的各种自动化任务都可以得心应手。
网络请求和响应
当网页从远程服务器请求一个资源的时候,请求和响应都可以通过onResourceRequested
和onResourceReceived
回调跟踪。这个使用演示可以在netlog.js找到:
var page = require('webpage').create();
page.onResourceRequested = function(request) {
console.log('Request ' + JSON.stringify(request, undefined, 4));
};
page.onResourceReceived = function(response) {
console.log('Receive ' + JSON.stringify(response, undefined, 4));
};
page.open(url);
想了解更多关于如何利用HAR export的特性以及YSlow-based的性能分析的信息,请参阅有关网络监测的页面。