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 亿元

原文地址:https://www.cnblogs.com/paulversion/p/8398315.html