小文笔记 - phantomjs
小文笔记 - phantomjs
视频推荐: http://www.intalesson.com/compedium/phantom
2017-05-13
第一节:安装
Windows安装:
下载解压文件
我的电脑 -> 属性 -> 高级系统设置
点击环境变量
在系统变量窗口中,找到Path变量,选中然后选择编辑
新建后,添加新的环境变量(phantomjs.exe)所在路径
在cmd中,运行phantomjs
Mac安装:
下载解压文件
在用户目录下查看ls -a查看全部文件
打开.bash_profile文件
加入export PATH=$PATH:/Users/suoyong/phantomjs-2.1.1-macosx/bin
在终端中输入phantomjs运行
phantomjs -v 查看版本。
phantomjs a.js 运行 a.js 文件。
phantomjs 进入程序, console.log(1) ,运行 js 代码。
phantom.exit() 退出.
第二节:核心模块
Web page 模块
文件模块
系统模块
子进程模块
网络服务模块
网站 phantomjs.org/api/
使用 require('模块名') 引用模块。
a.js
var sys = require('system');
console.log(sys.args);
phantom.exit();
运行,a.js 是第一个参数,hi 是第二个参数。
phantomjs a.js hi
a.js,hi
第三节:WebPage对象(一)
创建WebPage对象:create()
打开网址:page.open
在evaluate方法中操作页面(DOM,JSON,Canvas等)
把当前页面保存成图片:page.render()
.create() 创建 webPage 对象实例。
.open() 打开网址。
.evaluate() 在这个里面才能操作 web 界面中的内容。
打开百度首页标题
var webpage = require('webpage');
var page = webpage.create();
page.open('https://www.baidu.com',function(){ // 打开后做的事
var title = page.evaluate(function(){ // 操作页面
return document.title
});
console.log(title);
phantom.exit(1); // 1 成功 0失败
})
打开对象
var webpage = require('webpage');
var page = webpage.create();
page.open('https://www.baidu.com',function(){ // 打开后做的事
var title = page.evaluate(function(){ // 操作页面
return document.getElementById('lg');
});
// console.log(title) // [object Object] ,他其他是一个对象
// console.dir(title) // [object Object] ,对象
console.log(JSON.stringify(title)); // 所以需要转换一下
phantom.exit(1); // 1 成功 0失败
})
第三节:WebPage对象(二)
不能在 evaluate 中直接使用 console.log 显示 dom 信息,因为为了不影响其他页面正常运行, evaluate 是运行在沙盒中的,他没有 console.log 。
var webpage = require('webpage');
var page = webpage.create();
page.open('https://www.baidu.com',function(){
page.evaluate(function(){
console.log(document.getElementById('lg')); // 不会有 console.log() 输出。
});
phantom.exit(1);
})
解决方法:为 webpage 对象添加回调函数。
var webpage = require('webpage');
var page = webpage.create();
page.onConsoleMessage = function(msg){
console.log(msg);
}
page.open('http://www.intalesson.com/',function(){
page.evaluate(function(){
console.log(document.title);
});
phantom.exit(1);
})
传送参数
如下例添加一个 arg 参数,值为 ‘hi’ 。
var webpage = require('webpage');
var page = webpage.create();
page.onConsoleMessage = function(msg){
console.log(msg);
}
page.open('http://www.intalesson.com/',function(){
var title = page.evaluate(function(arg){
console.log(arg);
},'hi');
phantom.exit(1);
})
设置 user agent
page.settings.userAgent = '要设置的用户代理'
第五节:提交表单
page.onLoadFinished = function(){}当页面加载完后执行的函数。Dom.submit()提交。模仿点击事件提交。
演示登录智联招聘并截图保存。
var webpage = require('webpage');
var page = webpage.create();
page.open('http://www.zhaopin.com/',function(){
page.evaluate(function(){
var user = document.getElementById('loginname');
var pass = document.getElementById('password');
user.value = '用户名';
pass.value = '密码';
var submit = document.querySelector('.logbtn button');
var evt = document.createEvent('MouseEvents'); // 创建一个鼠标事件
evt.initMouseEvent('click'); // 初始化一个鼠标点击事件
submit.dispatchEvent(evt); // 使用事件,提交表单
})
page.onLoadFinished = function(status){
if(status == 'success'){ // 检查页面是否加载完毕
page.render('1.png'); // 把页面保存图片
phantom.exit(1);
}
}
})
第六节:操作Cookie
- cookies 查看
- addCookie 设置
当设置 cookie 时一定要设置 domain name value 三个值。
phantom.addCookie({'domain':'.baidu.com','name':'xw','value':'1'});
console.log(JSON.stringify(phantom.cookies));
phantom.exit(1);
第七节:CasperJS
CasperJS 扩展自 phantomJS ,可更简单的操作页面元素。
phantomjs 不是 nodejs 的模块,但 casperjs 可使用 npm 安装。
casper.start() = page.open()echo() = console.log()
phantomjs 像 js , casperjs 像 jq 。
- 安装 casperjs
npm install -g casperjs
第八节:步进式脚本语言
小文注
乱码问题: http://blog.csdn.net/kaosini/article/details/47252457
- 方法一:
在 js 文件中添加phantom.outputEncoding="gbk"可解决乱码。 - 方法二:
phantomjs --output-encoding=gbk a.js
小文笔记 - phantomjs的更多相关文章
- casperjs-options
The Casper class The easiest way to get a casper instance is to use the module's create() method: 最简 ...
- capserjs-prototype(下)
scrollTo() 具体样式: scrollTo(Number x, Number y) New in version 1.1-beta3. Scrolls current document to ...
- 笔记-python-selenium,phantomjs
笔记-python-selenium,phantomjs 1. 简介 1.1. selenium selenium是一款自动化测试工具,支持多种语言 为什么爬虫要使用selenium呢 ...
- PhantomJS笔记,Node.js集成PhantomJS
PhantomJS笔记,Node.js集成PhantomJS 转 https://www.linchaoqun.com/html/cms/content.jsp?menu=index&id=1 ...
- 今天折腾phantomjs+selenium的笔记
1.debian8里安装phantomjs的方法: 参照:http://www.cnblogs.com/lgh344902118/p/6369054.html a.去https://bitbucket ...
- Web前端学习笔记之安装和使用PhantomJS
0x00 安装PhantomJS(linux环境安装) 将PhantomJS下载在/usr/local/src/packet/目录下(这个看个人喜好) 操作系统:CentOS 7 64-bit 1.下 ...
- selenium&PhantomJS笔记
配置pip文件 Windows下pip 配置文件的位置%HOME%/pip/pip.ini linux下安装pip,以Debian Linux为例su -apt-get install python- ...
- Web Scraping with Python读书笔记及思考
Web Scraping with Python读书笔记 标签(空格分隔): web scraping ,python 做数据抓取一定一定要明确:抓取\解析数据不是目的,目的是对数据的利用 一般的数据 ...
- 笔记之Python网络数据采集
笔记之Python网络数据采集 非原创即采集 一念清净, 烈焰成池, 一念觉醒, 方登彼岸 网络数据采集, 无非就是写一个自动化程序向网络服务器请求数据, 再对数据进行解析, 提取需要的信息 通常, ...
随机推荐
- python os.path.join()
>>> import os >>> path = '/Users/beazley/Data/data.csv' >>> # Get the las ...
- HCatalog 学习之路
最近在使用sqoop把数据从hive数仓导出到mysql数据库中接触到了hcatalog,所以特意学习了解一下相关知识,据悉hcatalog还是apache顶级项目. 学习参考: HCatalog 介 ...
- python小练习:读入一个考试得分,判断这个分数是哪个等级,并输出,考虑异常场景
读入一个考试得分,判断这个分数是哪个等级,并输出. 等级:>=90 优 ,>=80且小于90 良,>=70 且小于80,中,>=60且<70及格 <60 不及格 ...
- JVM参数设置及条调优原理
http://unixboy.iteye.com/blog/174173/ 堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟 ...
- GUI常用对象的属性
%常用对象的属性 %.figure %hf=figure; %get(hf); %改变颜色 set Color %set(hf,'Color','w'); %去掉默认的菜单 Menubar %set( ...
- GoldenGate 12.3 MA架构介绍系列(3) - 各功能模块介绍
在新版的ogg 12.3 microservice architect中,提供了4个不同的服务模块和命令行模块. Admin Server: 负责连接用户.trandata, checkpoint的添 ...
- Linux下EC20实现ppp拨号(转)
源: Linux下EC20实现ppp拨号 参考: 4g模块EC20+android6.0系统移植 OK6410开发板调试EC20通信模块 海思3531添加移远EC20 4g模块 将移远通信的EC20驱 ...
- Spring框架之使用JdbcTemplate开发Dao层程序
简介: JdbcTemplate开发dao层程序 由Spring框架给我们提供,Spring提供的很多操作数据源(关系型数据库,二维表格模型,有明确的行和列(mysql/orcal等) 非关系 ...
- flask模板,路由,消息提示,异常处理
1.flask的路由与反向路由 from flask import Flask, request, url_for app = Flask(__name__) @app.route('/') def ...
- springmvc StringHttpMessageConverter 中文乱码的几种解决办法(亲测)
昨天,将一个原来使用JSR 311作为restful实现的测试系统改成了使用spring mvc,最后测试的时候发现输出的json字符串为乱码,从日志可以看出使用的是StringHttpMessage ...