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 ...
随机推荐
- MongoDB mongoimport 报错:lost connection to server
MongoDB对单次处理有大小限制,所以导入大文件会出问题. mongoimport 默认10000条 为一批导入,但如果单条数据过大,就会导致单次处理数据超过大小限制. 参数 --batchSize ...
- vue2 生命周期
转:https://segmentfault.com/a/1190000008570622 生命周期先上图 什么是生命周期 Vue实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载 ...
- WPF动画制作简单的按钮动画
主界面的代码 <StackPanel ButtonBase.Click="Grid_Click"> <Button Content="逐渐变大缩小&qu ...
- 你是那种仅仅看《XXXXX从入门到精通》的程序猿吗?
我一開始又要废话一番了. 实际上上了大学以后.你常常会在网上,在和别人的交流里,在老师的课堂上.反复听到一些书,比方黄仁宇的<万历十五年>.王小波"时代三部曲".村上春 ...
- 【CI】系列三.宿主机KVM配置及vdi与vmdk格式转换等
前提:宿主机需要支持虚拟化,如果未打开,则需要重启机器,在bois中打开该项: Ubuntu 及 KVM 相关主要参考官方 https://wiki.ubuntu.com/kvm 另外也可参考该页面: ...
- C语言循环中降低推断——————【Badboy】
为了让编译器更好地优化循环,应该尽量让循环中降低推断,方法之中的一个是将推断语句整合进表达式.还是这个样例: for (int i = 0; i < 1000*10; i++) { sum += ...
- 提高PAAS安全性的一点尝试
云服务已经成为现代人生活的一部分.手机中的照片会自己主动同步到云中:你的邮件内容保存在云中.办公软件执行在云中:你的健康数据会实时上传到云中.你每天的生活轨迹消耗的卡路里也会上传到云中:云服务也会逐渐 ...
- lua面向对象编程 《lua程序设计》 16章 笔记
Lua中的table就是一种对象,即它拥有状态.拥有独立于其值的标识(self).table与对象一样具有独立于创建者和创建地的征集周期 什么叫对象拥有独立的生命周期? Account = {bala ...
- C# mvc统一通道使用过滤器
问题描述 使用C#过滤器有一个最大的问题就是在过滤器转向后程序仍然会执行方法体 问题解决思路 使用统一通道执行方法 不直接进入控制器 通过反射调用 using System; using System ...
- python使用单例模式创建MySQL链接
代码: from functools import wraps import mysql.connector from sshtunnel import SSHTunnelForwarder def ...