PhantomJS参考文档文档格式.docx
《PhantomJS参考文档文档格式.docx》由会员分享,可在线阅读,更多相关《PhantomJS参考文档文档格式.docx(8页珍藏版)》请在冰豆网上搜索。
add(1,2)
按ctrl+c可以退出该环境。
下面,我们把上面的add()函数写成一个文件add.js文件。
//add.js
functionadd(a,b){returna+b;
console.log(add(1,2));
phantom.exit();
上面的代码中,console.log()的作用是在终端窗口显示,phantom.exit()则表示退出phantomjs环境。
一般来说,不管什么样的程序,这一行都不能少。
现在,运行该程序:
$phantomjsadd.js
终端窗口就会显示结果为3。
下面是更多的例子。
phantom.version
{
"
major"
:
1,
minor"
5,
patch"
0
}
console.log("
phantomisawesome"
)
phantomisawesome
window.navigator
cookieEnabled"
true,
language"
en-GB"
productSub"
20030107"
product"
Gecko"
//...
基本用法
加载网页
下面,我们用PhantomJS加载网页。
新建一个文本文件page.js,写入下面的代码:
//page.js
varpage=require('
webpage'
).create();
page.open('
http:
//slashdot.org'
function(s){
console.log(s);
phantom.exit();
});
第一行require('
).create()表示加载网页模块,并创建一个实例。
第二行open()方法,接受两个参数。
第一个参数是网页的网址,这里我们打开的是著名新闻网站Slashdot,第二个参数是回调函数,当网页打开后,该函数将会运行,它的参数是状态提示(status),如果打开成功,该参数的值就是success。
运行page.js,屏幕将会显示success。
执行代码
打开网页以后,可以使用page实例的evaluate方法,在页面中执行代码。
page.open(url,function(status){
vartitle=page.evaluate(function(){
returndocument.title;
});
console.log('
Pagetitleis'
+title);
网页内部的console语句,以及evaluate方法内部的console语句,默认不会显示在命令行。
这时可以采用onConsoleMessage回调函数,上面的例子可以改写如下。
page.onConsoleMessage=function(msg){
+msg);
};
page.evaluate(function(){
console.log(document.title);
上面代码中,evaluate方法内部有console语句,默认不会输出在命令行。
这时,可以用onConsoleMessage方法监听这个事件,进行处理。
加载资源
如果网页实例向远程服务器请求资源,这时HTTP请求(request)和HTTP回应可以用onResourceRequested和onResourceReceived追踪。
page.onResourceRequested=function(request){
Request'
+JSON.stringify(request,undefined,4));
page.onResourceReceived=function(response){
Receive'
+JSON.stringify(response,undefined,4));
page.open(url);
上面代码会以JSON格式,输出所有HTTP请求和HTTP回应的头信息。
page实例的includeJs方法,用于页面加载外部脚本。
'
function(){
page.includeJs("
//path/to/jquery.min.js"
$("
button"
).click();
phantom.exit()
上面的例子在页面中注入jQuery脚本,然后点击所有的按钮。
需要注意的是,由于是异步加载,所以phantom.exit()语句要放在page.includeJs()方法的回调函数之中,否则页面会过早退出。
接受参数
修改page.js,使得它可以从命令行接受参数。
system模块可以加载操作系统变量,system.args就是参数数组。
).create(),
system=require('
system'
),
t,address;
//如果命令行没有给出网址
if(system.args.length===1){
Usage:
page.js<
someURL>
);
t=Date.now();
address=system.args[1];
page.open(address,function(status){
if(status!
=='
success'
){
FAILtoloadtheaddress'
}else{
t=Date.now()-t;
Loadingtime'
+t+'
ms'
使用方法如下:
phantomjspage.js
应用
Phantomjs可以实现多种应用。
过滤资源
处理页面的时候,有时不希望加载某些特定资源。
这时,可以对URL进行匹配,一旦符合规则,就中断对资源的连接。
page.onResourceRequested=function(requestData,request){
if((/http:
\/\/.+?
\.css$/gi).test(requestData['
url'
])){
Skipping'
requestData['
]);
request.abort();
}
上面代码一旦发现加载的资源是CSS文件,就会使用request.abort方法中断连接。
截图
最简单的生成网页截图的方法如下。
function(){
page.render('
google.png'
page对象代表一个网页实例;
open方法表示打开某个网址,它的第一个参数是目标网址,第二个参数是网页载入成功后,运行的回调函数;
render方法则是渲染页面,然后以图片格式输出,该方法的参数就是输出的图片文件名。
除了简单截图以外,还可以设置各种截图参数。
page.zoomFactor=0.25;
console.log(page.renderBase64());
zoomFactor表示将截图缩小至原图的25%大小;
renderBase64方法则是表示将截图(PNG格式)编码成Base64格式的字符串输出。
下面的例子则是使用了更多参数。
page.settings.userAgent='
WebKit/534.46Mobile/9A405Safari/7534.48.3'
;
page.settings.viewportSize={width:
400,height:
600};
function(status){
Unabletoload!
vartitle=page.evaluate(function(){
varposts=document.getElementsByClassName("
article"
posts[0].style.backgroundColor="
#FFF"
window.setTimeout(function(){
page.clipRect={top:
0,left:
0,width:
600,height:
700};
page.render(title+"
1.png"