小文笔记 - 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的更多相关文章

  1. casperjs-options

    The Casper class The easiest way to get a casper instance is to use the module's create() method: 最简 ...

  2. capserjs-prototype(下)

    scrollTo() 具体样式: scrollTo(Number x, Number y) New in version 1.1-beta3. Scrolls current document to ...

  3. 笔记-python-selenium,phantomjs

    笔记-python-selenium,phantomjs 1.      简介 1.1.    selenium selenium是一款自动化测试工具,支持多种语言 为什么爬虫要使用selenium呢 ...

  4. PhantomJS笔记,Node.js集成PhantomJS

    PhantomJS笔记,Node.js集成PhantomJS 转 https://www.linchaoqun.com/html/cms/content.jsp?menu=index&id=1 ...

  5. 今天折腾phantomjs+selenium的笔记

    1.debian8里安装phantomjs的方法: 参照:http://www.cnblogs.com/lgh344902118/p/6369054.html a.去https://bitbucket ...

  6. Web前端学习笔记之安装和使用PhantomJS

    0x00 安装PhantomJS(linux环境安装) 将PhantomJS下载在/usr/local/src/packet/目录下(这个看个人喜好) 操作系统:CentOS 7 64-bit 1.下 ...

  7. selenium&PhantomJS笔记

    配置pip文件 Windows下pip 配置文件的位置%HOME%/pip/pip.ini linux下安装pip,以Debian Linux为例su -apt-get install python- ...

  8. Web Scraping with Python读书笔记及思考

    Web Scraping with Python读书笔记 标签(空格分隔): web scraping ,python 做数据抓取一定一定要明确:抓取\解析数据不是目的,目的是对数据的利用 一般的数据 ...

  9. 笔记之Python网络数据采集

    笔记之Python网络数据采集 非原创即采集 一念清净, 烈焰成池, 一念觉醒, 方登彼岸 网络数据采集, 无非就是写一个自动化程序向网络服务器请求数据, 再对数据进行解析, 提取需要的信息 通常, ...

随机推荐

  1. 孤立森林(Isolation Forest)

    前言随着机器学习近年来的流行,尤其是深度学习的火热.机器学习算法在很多领域的应用越来越普遍.最近,我在一家广告公司做广告点击反作弊算法研究工作.想到了异常检测算法,并且上网调研发现有一个算法非常火爆, ...

  2. JS-向数组指定位置添加元素

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. Linux服务器---邮件服务postfix安装

    安装postfix postfix是一个快速.易于管理.安全性高的邮件发送服务,可以配合dovecot实现一个完美的邮箱服务器. 1.安装postfix [root@localhost ~]# rpm ...

  4. jar包读取jar包内部和外部的配置文件,springboot读取外部配置文件的方法

    jar包读取jar包内部和外部的配置文件,springboot读取外部配置文件的方法 用系统属性System.getProperty("user.dir")获得执行命令的目录(网上 ...

  5. HDU 1207 汉诺塔II (递推)

    经典的汉诺塔问题经常作为一个递归的经典例题存在.可能有人并不知道汉诺塔问题的典故.汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往上按大小顺序摞着64片黄金圆盘.上 ...

  6. bzoj1625 [Usaco2007 Dec]宝石手镯

    01背包 #include<algorithm> #include<iostream> #include<cstdlib> #include<cstring& ...

  7. 2016 icpc ECfinal && codeforcesgym101194

    一不小心惨变旅游队,不过上海的风景不错 顺带找其他队交流一下集训经验...或许可以成为选拔和集训16级的依据 A.直接模3就可以了,2^(3*n)%7=1 C.Mr. Panda and Strips ...

  8. django ORM模型表的一对多、多对多关系、万能双下划线查询

    一.外键使用 在 MySQL 中,如果使用InnoDB引擎,则支持外键约束.(另一种常用的MyIsam引擎不支持外键) 定义外键的语法为fieldname=models.ForeignKey(to_c ...

  9. python的paramiko模块-远程登录linux主机并操作

    paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作. 如果python服务器对被远程控制机器开启了免密验证,即在python服务器上可通过ssh 用户名@被控制机 ...

  10. 11: python中的轻量级定时任务调度库:schedule

    1.1 schedule 基本使用 1.schedule 介绍 1. 提到定时任务调度的时候,相信很多人会想到芹菜celery,要么就写个脚本塞到crontab中. 2. 不过,一个小的定时脚本,要用 ...