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

phantom的使用的更多相关文章

  1. 强(strong)、软(soft)、弱(weak)、虚(phantom)引用

    https://github.com/Androooid/treasure/blob/master/source/lightsky/posts/mat_usage.md 1.1 GC Root JAV ...

  2. Phantom omini设备开发流程

    最近在忙着做毕业设计,我的毕业设计是做力觉临场感的,所以在力反馈设备Phantom Omini,由于整个设备是国外的国内的资料很少,我是14年拿到这个设备的但是真的是在开发是在16年了,中间有很多事没 ...

  3. HDOJ/HDU 1982 Kaitou Kid - The Phantom Thief (1)(字符串处理)

    Problem Description Do you know Kaitou Kid? In the legend, Kaitou Kid is a master of disguise, and c ...

  4. 14.5.4 Phantom Rows 幻影行

    14.5.4 Phantom Rows 幻影行 所谓的幻读问题发生在一个事务 当相同的查询产生不同的结果集在不同的时间. 例如,如果一个SELECT 是执行2次,但是第2次返回的时间不第一次返回不同, ...

  5. bom type:Phantom

    bom的类型 'type': fields.selection([('normal','Normal BoM'),('phantom','Sets / Phantom')], 'BoM Type', ...

  6. javascript - Show mouse cursor in phantom.js - Stack Overflow

    javascript - Show mouse cursor in phantom.js - Stack Overflow Show mouse cursor in phantom.js

  7. 14.3.4 Phantom Rows 幻影行

    14.3.4 Phantom Rows 幻影行 所谓的幻读为发生在一个事务 当相同的查询产生不同的结果集在不同的时间. 比如,如果一个SELECT被执行2次, 但是第2次返回的记录不是第一次返回的记录 ...

  8. AGC015 C-Nuske vs Phantom Thnook AtCoder 思路 前缀和

    目录 题目链接 题解 代码 题目链接 AGC015 C-Nuske vs Phantom Thnook AtCoder 题解 树的性质有: 如果每个蓝色连通块都是树,那么连通块个数=总点数−总边数. ...

  9. 使用Phantom omni力反馈设备控制机器人

    传统的工业机器人普遍采用电机 .齿轮减速器 .关节轴三者直接连接的传动机构,这种机构要求电机与减速器安装在机械臂关节附近,其缺点是对于多关节机械臂,下一级关节的电机与减速器等驱动装置成为上一级关节的额 ...

  10. (7.0 version)当销售单中包含service或phantom类型的产品时,销售单不能完成的原因分析及解决方案

    首先说一下service类型的产品,由于该类型的产品不需要发货,所以当在销售订单确认了后,销售单直接变成了等待开票的状态,但当开票的流程结束后,订单却还是停在销售单的状态上,该问题的解决方案是安装Ta ...

随机推荐

  1. 1-N中1出现的次数

    /*标记1-N中1出现的次数.例如,当N等于18时,1出现的次数为2 + 9 = 11 个位数出现1的为:1,11,十位数出现1的为10-18*/public class OneNoInN { // ...

  2. Redis使用记录

    登陆:cd /usr/local/bin 启动客户端:./redis-cli 查看所有key:keys * 查看key类型:type keyname 查看list长度:LLEN KEY_NAME 清空 ...

  3. c# word 操作

    public class WordOperate { #region 新建Word文档 /// <summary> /// 动态生成Word文档并填充内容 /// </summary ...

  4. jQuery 获取DOM节点的两种方式

    jQuery中包裹后的DOM对象实际上是一个数组,要获得纯粹的DOM对象可以有两种方式: 1.使用数组索引方式访问,例如: var dom = $(dom)[0]; 如: $("#id&qu ...

  5. ADO.NET基础知识学习(SQLCOnnection&SQLCommand&SQLDataReader&SQLDataAdapter&DataSet)

    通过ADO.NET技术,我们可以高效的完成客户端同数据库之间的数据访问操作,便于我们在客户端程序简便高效的访问以及获取数据库中的有用数据,同时也可以对数据库中的数据进行更新,即可以完成客户端与数据库之 ...

  6. js 判断浏览器内核

    function getOs()  {      var OsObject = "";     if(navigator.userAgent.indexOf("MSIE& ...

  7. nginx环境下启动php-fpm

    nginx环境下启动php-fpm 1.首先查看是否安装了php-fpm 这个我试了好多命令都不行比如 rpm -qa php-fpm , rpm -ql php-fpm , which php-fp ...

  8. CentOS7中关闭selinux

    在安装Cobbler和Puppet时需要关闭selinux,但是通常情况下载安装完CentOS7后,默认情况下SElinux是启用状态, 如下所示: [csharp] view plaincopy   ...

  9. Java客户端Jedis

    使用Jedis的Java客户端 maven依赖 <!-- jedis --> <dependency> <groupid>redis.clients</gro ...

  10. openresty+lua在反向代理服务中的玩法

    openresty+lua在反向代理服务中的玩法 phith0n · 2015/06/02 10:35 0x01 起因 几天前学弟给我介绍他用nginx搭建的反代,代理了谷歌和维基百科. 由此我想到了 ...