phantom的使用
phantom页面加载
通过Phantomjs,一个网页可以被加载、分析和通过创建网页对象呈现,访问我的博客园地址:http://www.cnblogs.com/paulversion/p/8393842.html,并将当前页面进行截图保存。pageload.js代码如下:
var page = require('webpage').create();
page.open("http://www.cnblogs.com/paulversion/p/8393842.html",function(status){
console.log("Status:"+ status);
if(status === "success"){
page.render("floki.jpg")
}
phantom.exit()
})
在命令行中运行
phantomjs pageload.js
输出内容为:Status:success,并在当前目录下生成对网页的截图floki.jpg
除了打开网页截图之外,还可以对网页的打开进行测速。下面的例子用来计算一个网页的加载速度,同时还用到了给javascript脚本传递参数的功能.speed.js代码如下:
var page = require('webpage').create()
var system = require('system')
var time, address
if( system.args.length === 1){
console.log('Usage: speed.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()
})
代码评估
为了评估网页中的javaScript代码,可以利用evaluate。这个执行是沙盒式的,它不会去执行网页外的javascript代码。evaluate方法可以返回一个对象,然而返回值仅限于对象,不能包含函数.
比如我们可以使用evaluate方法获取http://www.cnblogs.com/paulversion/p/8393842.html页面的标题,title.js代码如下
var url = 'http://www.cnblogs.com/paulversion/p/8393842.html'
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()
})
在命令行中输入;phantomjs --output-encoding=gbk title.js
输出结果为 Page title is Python动态网站的抓取 - paulversion - 博客园
网络监控
因为PhantomJS允许检验网络流量,因此它适合分析网络行为和性能,实现对网络的监听。当向远程服务器发送请求时,可以使用onResourceRequested和onResourceReceived两个方法嗅探所有的资源请求和响应。实例net.js代码如下
var url = 'http://www.cnblogs.com/paulversion/p/8393842.html'
var page = require('webpage').create()
page.onResourceRequested = function(request){
console.log('Requsest '+ JSON.stringify(requsest,undefined,4));
}
page.onResourceReceived = function(response){
console.log('Receive ' + JSON.stringify(response,undefined,4))
}
page.open(url)
在命令行中输入
phantomjs net.js
页面自动化
PhantomJS可以加载和处理一个网页,非常适用于自动化处理,PhantomJS中标准JavaScript的DOM操作和CSS选择器都是生效的。如下html.js代码
var page = require('webpage').create()
console.log('The default user agent is'+page.settings.userAgent)
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
page.open('http://movie.mtime.com/249736/',function(status){
if(status !== 'success'){
console.log("Unable to access network")
}else{
var ua = page.evaluate(function(){
return document.getElementById('ratingRegion').textContent;
})
console.log(ua)
}
phantom.exit()
})
执行命令 phantomjs --output-encoding=gbk html.js 输出
The default user agent isMozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/538.1 (
KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1
8.0总分:101,718人评分 1,132人想看音乐 画面 导演 故事 …票房:4.83 亿元