以前写爬虫,遇到需要登录的页面,一般都是通过chrome的检查元素,查看登录需要的参数和加密方法,如果网站的加密非常复杂,例如登录qq的,就会很蛋疼

在后面,有了Pyv8,就可以把加密的js文件扔给它,然后返回加密后的字符串。但是Pyv8只能安装在Centos7的版本,而且耗用内存也比较大。

现在有了PhantomJS,再也不需要考虑登录的参数和加密了,用PhantomJS打开页面,通过JS或JQuery语句,填入账号和密码,然后点击登录,然后把Cookies保存下来,就可以模拟登录了。

1.安装

# yum -y install gcc gcc-c++ make flex bison gperf ruby \
openssl-devel freetype-devel fontconfig-devel libicu-devel sqlite-devel \
libpng-devel libjpeg-devel
# git clone git://github.com/ariya/phantomjs.git
# cd phantomjs
# git checkout 2.0
# ./build.sh

2.创建一个page实例

var page = require('webpage').create();

3.打开一个页面

page.open('http://www.baidu.com', function() {
});

第二个参数是打开页面后回调的函数

4.执行js语句

        page.evaluate(function() {
$("button").click();
console.info($("button"))
});

包裹在evaluate里面的js语句是在沙箱里面运行的,沙箱的上下文环境就是open的页面的环境,所以在这里可以通过js语句访问页面的元素,例如$("body").html()

由于在沙箱中执行,所以console.info不会输出的终端,如果需要输出到终端,就要设置回调函数:

page.onConsoleMessage = function(msg) {
console.log(msg);
};

5.cookies

获取页面的cookies

console.info(JSON.stringify(page.cookies))

cookies的数据结构,相当于{"age":"12"}

[
{
"domain": "info.aaa.com",
"httponly": false,
"name": "age",
"path": "/",
"secure": false,
"value": "12"
}
]

6.截图

page.viewportSize = { width: 1366, height: 600 };//设置页面的尺寸
page.render('info_test.png');

如果截图后,中文字符显示为方框,安装字体库

yum install bitmap-fonts bitmap-fonts-cjk

7.脚本参数

var page = require('webpage').create(),
system = require('system'),
address, output, size; if (system.args.length != 5) {
console.log('Usage: test.js domain username password projects screen_shot_path ');
phantom.exit(1);
} else {
var domain = system.args[1]
var username = system.args[2]
var password = system.args[3]
var projects = system.args[4]
var root_shot_path = system.args[5]
}

8.注意

  • 由于js语言是非阻塞的,所以有时候需要使用setTimtout setInterval来等待沙箱中执行的js语句,例如等待里面的ajax完成等。

9.简单的模拟登录DEMO

var page = require('webpage').create();
page.viewportSize = { width: 1366, height: 600 };
var url='http://www.mysite.com/login'
page.open(url, function() {
ret=page.evaluate(function() {
$("#username")[0].value='lujianxing'
$("#password")[0].value='test'
$("#submit").click();
});
setTimeout('print_cookies()',10000)
}); function print_cookies(){
console.info(JSON.stringify(page.cookies, undefined, 4))
phantom.exit()
}

10.命令行运行脚本

phantomjs test.js

参考

PhantomJS官网

转载请带上

PhantomJS实现最简单的模拟登录方案的更多相关文章

  1. python之简单POST模拟登录

    宿舍自从换了校园网的认证系统就不再用客户端了,只能在网页登录.每次上网都要打开浏览器的话很不方便,而且我有时在ubuntu控制台上想联网但终端文本浏览器似乎不支持页面跳转,既然如此,何不写个客户端呢? ...

  2. 简单的模拟登录Wap版新浪微博

    环境:Ubuntu 16.04 python版本3.5+ import requests, lxml from bs4 import BeautifulSoup from io import Byte ...

  3. 测试开发Python培训:模拟登录新浪微博-技术篇

    测试开发Python培训:模拟登录新浪微博-技术篇   一般一个初学者项目的起点就是登陆功能的自动化,而面临的项目不同实现的技术难度是不一样的,poptest在做测试开发培训中更加关注技术难点,掌握技 ...

  4. python爬虫【实战篇】模拟登录人人网

    requests 提供了一个叫做session类,来实现客户端和服务端的会话保持 使用方法 1.实例化一个session对象 2.让session发送get或者post请求 session = req ...

  5. urllib库利用cookie实现模拟登录慕课网

    思路 1.首先在网页中使用账户和密码名登录慕课网 2.其次再分析请求头,如下图所示,获取到请求URL,并提取出cookie信息,保存到本地 3.最后在代码中构造请求头,使用urllib.request ...

  6. phantomjs模拟登录

    最近在做一些公司其他部门系统的后台模拟操作,但由于那边的系统最开始是外包给其他公司开发的,现在那边的开发也不知道有些post的参数是如何生成的.于是想考察下是不是可以把phantomjs这个工具给加进 ...

  7. Cookies与保持登录(新浪微博的简单模拟登录)

    Cookies与保持登录(新浪微博的简单登录) .note-content {font-family: "Helvetica Neue",Arial,"Hiragino ...

  8. 用简单的http抓包来实现微信公众网页如何模拟登录

    一.准备工具: 系统:XP 浏览器:IE8 抓包工具:HttpWatch(它可以查看url请求的数据包) 二.抓包思路: 浏览器上的任何获取数据的方式都符合http协议的请求,只要发送符合要求的数据就 ...

  9. python练习笔记——编写一个装饰器,模拟登录的简单验证

    编写一个装饰器,模拟登录的简单验证(至验证用户名和密码是否正确) 如果用户名为 root 密码为 123则正确,否则不正确.如果验证不通过则不执行被修饰函数 #编写一个装饰器,模拟登录的简单验证 #只 ...

随机推荐

  1. java中访问mysql数据库中的表结构信息

    package cn.hncu.meta; import java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.Re ...

  2. Android(java)学习笔记110:ScrollView用法

    理论部分 1.ScrollView和HorizontalScrollView是为控件或者布局添加滚动条 2.上述两个控件只能有一个孩子,但是它并不是传统意义上的容器 3.上述两个控件可以互相嵌套 4. ...

  3. javascript 通过面向对象编写圆形数字时钟

    效果如图所示,代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  4. URAL 1136 Parliament 二叉树水题 BST后序遍历建树

    二叉树水题,特别是昨天刚做完二叉树用中序后序建树,现在来做这个很快的. 跟昨天那题差不多,BST后序遍历的特型,找到最后那个数就是根,向前找,比它小的那块就是他的左儿子,比它大的那块就是右儿子,然后递 ...

  5. uva 133 The Dole Queue 双向约瑟夫环 模拟实现

    双向约瑟夫环. 数据规模只有20,模拟掉了.(其实公式我还是不太会推,有空得看看) 值得注意的是两个方向找值不是找到一个去掉一个,而是找到后同时去掉. 还有输出也很坑爹! 在这里不得不抱怨下Uva的o ...

  6. Windows Azure 微软公有云体验(二) 存储成本比较分析

    Windows Azure 微软公有云已经登陆中国有一段时间了,现在是处于试用阶段,Windows Azure的使用将会给管理信息系统的开发.运行.维护带来什么样的新体验呢? Windows Azur ...

  7. warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失

    bug来源: 一直在看sift然后就手贱的给 opencv源码做注释,如果在vs里面打开会一直相安无事,但是问题出在我用了notepad++. 这样就报了标题的错误. 因为notepad++会以uni ...

  8. 将CSV格式的文件导入到数据中

    --创建表 create table t1( id number primary key, name ), score number, subject ) ) --创建控制文件 t1.ctl,以文本的 ...

  9. mac 如何进入/usr/sbin目录

    1.进入terminal, 输入 ls /usr/sbin 2.在finder>前往文件夹,输入路径/usr/sbin

  10. 【ANT】ant概述

    ANT是集软件测试.编译.打包.部署等自动化构建工具,是Apache软件基金会JAKARTA目录中的一个子项目,具有以下优点: 跨平台性 ANT是由Java语言编写,具有很好的跨平台性. 操作简单 A ...