phantomjs 是什么?----主要是mac下面
phantomjs 是什么?
PhantomJS是一个无界面的,可脚本编程的WebKit浏览器引擎。它原生支持多种web 标准:DOM 操作,CSS选择器,JSON,Canvas 以及SVG。
phantomjs 可以做什么?
- 无UI界面的网站测试
- 屏幕快照
- 页面操作自动化
- 网络监控
下载安装
找到对应版本下载安装,或是通过源码编译安装。
window
下载phantomjs-1.9.8-windows.zip并解压,phantomjs.exe直接可用。方便起见,把phantomjs.exe所在目录加入到PATH中
MAC OS X
下载phantomjs-1.9.8-macosx.zip并解压,bin/phantomjs直接可用。
或者通过Homebrew安装
brew update && brew install phantomjs
或者通过MacPorts安装
sudo port selfupdate && sudo port install phantomjs
Linux
64位下载phantomjs-1.9.8-linux-x86_64.tar.bz2
32位下载phantomjs-1.9.8-linux-i686.tar.bz2
安装渲染所需(FreeType,Fontconfig)依赖:
sudo apt-get install fontconfig freetype libfreetype.so.6 libfontconfig.so.1 libstdc++.so.6
快速开始
安装完phantomjs 之后,将其可执行路径加入到PATH中。
hello world
新建hello.js,添加如下代码:
console.log('Hello, world!');
phantom.exit();
在命令行里执行:
phantomjs hello.js
会输出:
Hello, world!
第一行代码,console.log会打印字符串到命令行。第二行代码,phantom.exit会终止执行过程。
注意:一定不要忘了在代码里调用phantom.exit,否则PhantomJS将不会被终止
页面加载
通过page 对象,我们可以加载,分析,渲染页面。
下面的代码展示了page 对象最简单的用法。它加载example.com然后将其保存为一个图片example.png。
var page = require('webpage').create();
page.open('http://example.com', function() {
page.render('example.png');
phantom.exit();
});
PhantomJS基于Webkit引擎,可以布局和渲染页面,我们可以利用这一点给网页拍照。
下面的loadspeed.js,加载一个指定的URL,然后测量加载页面所需时间。
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();
});
从命令行执行(注意有http):
phantomjs loadspeed.js http://www.google.com
输出结果类似下面这样:
Loading http://www.google.com Loading time 719 msec
执行脚本
想要在页面的上下文里执行javascript或者coffeescript代码,要使用evaluate()函数。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();
});
默认情况下,页面代码里的console输出的消息,以及evaluate()里的console输出的消息都不会显示出来。不过,通过使用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();
});
evaluate()里的代码就像在浏览器里执行一样,所以像标准的DOM操作、CSS选择等都可以正常进行。我们可以利用这一点将一些页面工作自动化。
网络请求与返回
当页面向服务器请求资源时,通过onResourceRequested 和 onResourceReceived 回调函数可以 记录request和response。例如:
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);
基于此我们可以进行一些页面性能的分析。
phantomjs 是什么?----主要是mac下面的更多相关文章
- MAC 上的Phantomjs的安装和配置
1.下载 http://phantomjs.org/download.html 选择mac版本下载 2.下载完成后,解压缩,然后放到自己的一个目录下面 例如:/usr/local/Phantomjs/ ...
- Mac与Phy组成原理的简单分析
1. general 下图是网口结构简图.网口由CPU.MAC和PHY三部分组成.DMA控制器通常属于CPU的一部分,用虚线放在这里是为了表示DMA控制器可能会参与到网口数据传输中. 对于上述的三部分 ...
- Mac OS环境下配置Myeclipse2015的经验
反复测试装了多次,现在把成功安装的方法陈列如下: 1. 相关的资源: (1)下载 myeclipse-2015-stable-2.0-offline-installer-macosx.dmg 链接:h ...
- 最近新装系统windows8.1+Mac。。。还没装驱动就遇到一堆问题。。。
---恢复内容开始--- 1,刚开始装好了,后来莫名看不到磁盘了,原因:64位mac盘会丢失盘符,所以macdrive也看不到...解决:(将AF改为06,修改内容后改回AF,早知道这么简单就不用重新 ...
- iOS之 Mac下抓包工具使用wireshark
主要是mac上面网卡的授权 分三个步骤: 1.wireshark安装 wireshark运行需要mac上安装X11,mac 10.8的系统上默认是没有X11的.先去http://x ...
- 开始使用Mac OS X——写给Mac新人
本文转自博客园:http://www.cnblogs.com/chijianqiang/archive/2011/08/03/2126593.html 写这篇文档的原因有两个,一.身边使用Mac的朋友 ...
- 如何解决Mac与iPhone之间handoff连接问题
首先账户以及设备handoff开关问题不再赘述.主要是昨天发现的一个小技巧 当确认所有设备的iCloud账号统一.蓝牙打开.处在同一WiFi下的前提下,我的iPhone和Mac仍然handoff连接有 ...
- 【转】开始使用Mac OS X——写给Mac新人
写这篇文档的原因有两个,一.身边使用Mac的朋友越来越多,经常会有人来咨询一些常见的使用问题,比如:“为什么把界面右上角的红色按钮叉掉,程序还没有关闭?”之类.而且我也不愿意看到很多人使用OSX时仅仅 ...
- Lodop获取客户端主网卡ip地址是0.0.0.0
LODOP技术手册的GET_SYSTEM_INFO篇,LODOP可以用语句获取到客户端很多信息,NetworkAdapter.1.IPAddress是主网卡IP地址,通常情况下是没问题的,不过如果当前 ...
随机推荐
- GMA Round 1 双曲线与面积
传送门 双曲线与面积 P是双曲线$\frac{x^2}{1471^2}-\frac{y^2}{1372^2}=1$上的一个动点,现在过P作一条直线与该双曲线的两条渐近线相交于A.B两点,且|AP|=| ...
- JS中的算法与数据结构——排序(Sort)
排序算法(Sort) 引言 我们平时对计算机中存储的数据执行的两种最常见的操作就是排序和查找,对于计算机的排序和查找的研究,自计算机诞生以来就没有停止过.如今又是大数据,云计算的时代,对数据的排序和查 ...
- seq_file学习(2)—— seq_file
li {list-style-type:decimal;}ol.wiz-list-level2 > li {list-style-type:lower-latin;}ol.wiz-list-le ...
- .NET Core中使用IHostedService结合队列执行定时任务
最近遇到了这样的场景:每隔一段时间,需要在后台使用队列对一批数据进行业务处理. Quartz.NET是一种选择,在 .NET Core中,可以使用IHostedService执行后台定时任务.在本篇中 ...
- PHP中new static()与new self()的区别异同分析
本文实例讲述了PHP中new static()与new self()的区别异同,相信对于大家学习PHP程序设计能够带来一定的帮助. 问题的起因是本地搭建一个站.发现用PHP 5.2 搭建不起来,站PH ...
- jPlayer获取播放时间
关于jPlayer的用法,可以参考:jPlayer 2.6.0开发者手册 http://www.jplayer.cn/developer-guide.html 视频播放例子: //视频播放 var v ...
- 浪院长 | spark streaming的使用心得
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/rlnLo2pNEfx9c/article/details/82505159 今天.主要想聊聊spar ...
- Elasticsearch跨集群搜索(Cross Cluster Search)
1.简介 Elasticsearch在5.3版本中引入了Cross Cluster Search(CCS 跨集群搜索)功能,用来替换掉要被废弃的Tribe Node.类似Tribe Node,Cros ...
- jvm理论-字节码指令
Java虚拟机的指令由一个字节长度的.代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成. 基本数据类型 1.除了l ...
- python接口自动化测试(七)-unittest-批量用例管理
我们日常项目中的接口测试案例肯定不止一个,当案例越来越多时我们如何管理这些批量案例?如何保证案例不重复?如果案例非常多(成百上千,甚至更多)时如何保证案例执行的效率?如何做(批量)测试数据的管理?如何 ...