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 亿元
phantom的使用的更多相关文章
- 强(strong)、软(soft)、弱(weak)、虚(phantom)引用
https://github.com/Androooid/treasure/blob/master/source/lightsky/posts/mat_usage.md 1.1 GC Root JAV ...
- Phantom omini设备开发流程
最近在忙着做毕业设计,我的毕业设计是做力觉临场感的,所以在力反馈设备Phantom Omini,由于整个设备是国外的国内的资料很少,我是14年拿到这个设备的但是真的是在开发是在16年了,中间有很多事没 ...
- 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 ...
- 14.5.4 Phantom Rows 幻影行
14.5.4 Phantom Rows 幻影行 所谓的幻读问题发生在一个事务 当相同的查询产生不同的结果集在不同的时间. 例如,如果一个SELECT 是执行2次,但是第2次返回的时间不第一次返回不同, ...
- bom type:Phantom
bom的类型 'type': fields.selection([('normal','Normal BoM'),('phantom','Sets / Phantom')], 'BoM Type', ...
- javascript - Show mouse cursor in phantom.js - Stack Overflow
javascript - Show mouse cursor in phantom.js - Stack Overflow Show mouse cursor in phantom.js
- 14.3.4 Phantom Rows 幻影行
14.3.4 Phantom Rows 幻影行 所谓的幻读为发生在一个事务 当相同的查询产生不同的结果集在不同的时间. 比如,如果一个SELECT被执行2次, 但是第2次返回的记录不是第一次返回的记录 ...
- AGC015 C-Nuske vs Phantom Thnook AtCoder 思路 前缀和
目录 题目链接 题解 代码 题目链接 AGC015 C-Nuske vs Phantom Thnook AtCoder 题解 树的性质有: 如果每个蓝色连通块都是树,那么连通块个数=总点数−总边数. ...
- 使用Phantom omni力反馈设备控制机器人
传统的工业机器人普遍采用电机 .齿轮减速器 .关节轴三者直接连接的传动机构,这种机构要求电机与减速器安装在机械臂关节附近,其缺点是对于多关节机械臂,下一级关节的电机与减速器等驱动装置成为上一级关节的额 ...
- (7.0 version)当销售单中包含service或phantom类型的产品时,销售单不能完成的原因分析及解决方案
首先说一下service类型的产品,由于该类型的产品不需要发货,所以当在销售订单确认了后,销售单直接变成了等待开票的状态,但当开票的流程结束后,订单却还是停在销售单的状态上,该问题的解决方案是安装Ta ...
随机推荐
- Android TextView 常见问题与使用总结
一.文字显示行数设置 1. 仅显示一行文字 android:singleLine="true" setTransformationMethod(TransformationMeth ...
- Memory Barriers
这回该进入主题了. 上一文最后提到了 Memory Barriers ,即内存屏障.由于对一个 CPU 而言,a = 1; b = 1. 由于在中间加了内存屏障,在 X86 架构下,就 ...
- 微信团队原创分享:iOS版微信的内存监控系统技术实践
本文来自微信开发团队yangyang的技术分享. 一.前言 FOOM(Foreground Out Of Memory),是指App在前台因消耗内存过多引起系统强杀.对用户而言,表现跟crash一样. ...
- 微信小程序 - 表单验证插件WxValidate(自定义警告信息形式)
弹出的形式对于用户来说,总是不太友好的 可能会出现层级问题(只需要设置一下提示的层级即可) WxValidate内置规则 以下代码拷贝即可使用~ wxml <form bindsubmit='s ...
- java集合框架小结
总结例如以下: 1.假设要求线程安全的, 使用Vector.Hashtable 2.假设不要求线程安全,应该使用ArrayList.LinkedList.HashMap 3.假设要求有映射关系,键值对 ...
- 【Python3 爬虫】07_正则表达式(原子)
原子是正则表达式的最基本的组成单位,而且在每个模式中最少包含一个原子.原子是由所有那些未显示指定为元字符的打印和非打印字符组成. 原子分类 1.普通字符作为原子 普通字符是编写正则表达式时最常见的原子 ...
- 基于Jekyll的博客模板
代码地址如下:http://www.demodashi.com/demo/13147.html 效果 环境配置 环境 Windows 10 Git Bash 安装ruby 下载rubyinstalle ...
- Jenkins spring boot 自动部署方案
原文地址:http://www.cnblogs.com/skyblog/p/5632869.html 现在主流的自动部署方案大都是基于Docker的了,但传统的自动部署方案比较适合中小型公司,下面的方 ...
- Redis之intset数据结构
0.前言 redis中intset是一个整数集合, 只能存储整数类型的数据, 可以是16位, 32位, 或者是64位, 是以升序排列的数组进行保存数据,下面会介绍具体数据结构和对其操作过程. 1.数据 ...
- hdu1584 A strange lift (电梯最短路径问题)
A strange lift Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...