PhantomJS是一个命令行工具。确保您熟悉命令提示符或PowerShell(在Windows上)或终端(在macOS和Linux上)的使用。
这个指令假设PhantomJS已经安装并放置在路径的某个地方(例如,Windows用户请参阅本教程)。
一、下载
地址:https://phantomjs.org/downloa...
选择对应操作系统的下载即可,下载完成后需要添加到环境变量中,才能使用phantomjs命令
二、Hello World!
创建test.js文件,内容如下:
console.log('Hello, world!');
phantom.exit();
执行命令
> phantomjs test.js
Hello, world!
注意:phantom需要退出,不然会一直执行,所以需要在脚本文件尾加上phantom.exit()
三、加载网页打印快照
test.js修改如下:
var page = require('webpage').create();
page.open('https://www.baidu.com', function(status) {
console.log("Status: " + status);
if(status === "success") {
page.render('./baidu-snapshoot.png');
}
phantom.exit();
});
上面的代码是尝试打开百度网站,成功返回:success 失败返回:fail。成功后会执行网站截图保存下来
四、测试加载网站的速度
test.js修改如下:
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 test.js https://www.baidu.com
Loading https://www.baidu.com
Loading time 1485 msec
五、代码评审
在可以沙盒模式下使用evaluate()
方法返回简单的javascript对象,不支持函数或闭包
test.js修改下如:
phantom.outputEncoding="gb2312"; // 解决命令行乱码
var page = require('webpage').create();
page.open('https://www.baidu.com', function(status) {
var title = page.evaluate(function() {
return document.title;
});
console.log('Page title is ' + title);
phantom.exit();
});
执行命令
> phantomjs test.js
Page title is 百度一下,你就知道
如果想拦截console打印,需要使用onConsoleMessage
回调
phantom.outputEncoding="gb2312";
var page = require('webpage').create();
page.onConsoleMessage = function(msg) {
console.log('Page title is ' + msg);
};
page.open('https://www.baidu.com', function(status) {
page.evaluate(function() {
console.log(document.title);
});
phantom.exit();
});
执行命令
> phantomjs test.js
Page title is 每一个星球都有一个驱动核心,
每一种思想都有影响力的种子。
感受世界的温度,
年轻的你也能成为改变世界的动力,
百度珍惜你所有的潜力。
你的潜力,是改变世界的动力!
Page title is %c百度2021校园招聘简历投递:https://talent.baidu.com/external/baidu/campus.html color:red
Page title is 百度一下,你就知道
除了上面一些简单的示例,还需要探索使用PhantomJS进行页面自动化、网络监控、屏幕捕获和headless测试。官方也提供了一些写好的 示例 下载运行即可。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。