Python脚本实现虾米网签到功能


Posted in Python onApril 12, 2016

本文实例讲述了Python脚本实现虾米网签到功能的方法。分享给大家供大家参考,具体如下:

概述

这个脚本完成了自动登录虾米网、签到的功能。

大致要用到urllib、urllib2、cookielib这几个模块。其实就是用python实现向指定的url去post数据。

至于我怎么知道在浏览器里面登录和签到时浏览器都向服务器post了什么数据的问题,可以用强大的chrome:F12->Network里面可以看得到。有的服务器登录成功后会让客户端浏览器跳转或者立即刷新一次页面等等,会把登录时向服务器post的数据刷没掉,那么就要用到强大的抓包软件——WireShark来分析。比如用chrome:

Python脚本实现虾米网签到功能

然后就可以写了,构造Request Headers和要Post的Data(就是Chrome里的Form Data),ID和Pwd是明文传输,呵呵。

代码

下面是代码:

# -*- coding: cp936 -*-
'''''
Created on 2012-11-15
@author: liushuai
'''
import urllib, urllib2, cookielib, sys
class LoginXiami:
  login_header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.79 Safari/537.4'}
  signin_header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.79 Safari/537.4', 'X-Requested-With':'XMLHttpRequest', 'Content-Length':0, 'Origin':'http://www.xiami.com', 'Referer':'http://www.xiami.com/'}
  email = ''
  password = ''
  cookie = None
  cookieFile = './cookie.dat'
  def __init__(self, email, pwd):
    self.email = email
    self.password = pwd
    self.cookie = cookielib.LWPCookieJar()
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookie))
    urllib2.install_opener(opener)
  def login(self):
    postdata = {'email':self.email, 'password':self.password, 'done':'http://www.xiami.com', 'submit':'%E7%99%BB+%E5%BD%95'}
    postdata = urllib.urlencode(postdata)
    print 'Logining...'
    req = urllib2.Request(url='http://www.xiami.com/member/login', data=postdata, headers=self.login_header)
    result = urllib2.urlopen(req).read()
    self.cookie.save(self.cookieFile)
    result = str(result).decode('utf-8').encode('gbk')
    if 'Email 或者密码错误' in result:
      print 'Login failed due to Email or Password error...'
      sys.exit()
    else :
      print 'Login successfully!'
  def signIn(self):
    postdata = {}
    postdata = urllib.urlencode(postdata)
    print 'signing...'
    req = urllib2.Request(url='http://www.xiami.com/task/signin', data=postdata, headers=self.signin_header)
    result = urllib2.urlopen(req).read()
    result = str(result).decode('utf-8').encode('gbk')
    self.cookie.save(self.cookieFile)
    try:
      result = int(result)
    except ValueError:
      print 'signing failed...'
      sys.exit()
    except:
      print 'signing failed due to unknown reasons ...'
      sys.exit()
    print 'signing successfully!'
    print self.email,'have signed', result, 'days continuously...'
if __name__ == '__main__':
  user = LoginXiami('你的登录邮箱', '你的密码')
  user.login()
  user.signIn()

然后运行一下脚本就可以登录、签到了。

Python脚本实现虾米网签到功能

后记

有的Discuz!论坛据说是为了防止用户用网页之外的途径向服务器post数据,服务器在每个用户每次登录成功后生成一个叫formhash的值,作为表单的隐藏域返回给客户端(服务端也有保存)。

Python脚本实现虾米网签到功能

客户端在向服务器post数据的时候,这个值会作为表单的一项数据“神不知鬼不觉”(因为是表单的隐藏域)地一同post过去,服务端收到客户端的post请求后,和服务端的formhash值作对比,就能知道是否是通过浏览器页面的方式post的数据了。

不过如果真的是为了防止这,这个做法真的有用吗?我试了一下,只需用简单的正则分析下登录成功返回的html,找到formhash值,再用上述方法和理论post过去即可,成功的完成了签到的功能。

反正不管怎么说,就是用脚本“假装”地完成了一下用浏览器登录并签到的过程。
:由于网站可能进行改版或升级,那么向服务器中post的数据可能会有变化,那么就要对代码进行相应调整,故代码仅供研究和学习参考之用。

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
在Python3中使用asyncio库进行快速数据抓取的教程
Apr 02 Python
PYTHON 中使用 GLOBAL引发的一系列问题
Oct 12 Python
Python数据结构之栈、队列的实现代码分享
Dec 04 Python
mac 安装python网络请求包requests方法
Jun 13 Python
python爬虫租房信息在地图上显示的方法
May 13 Python
获取django框架orm query执行的sql语句实现方法分析
Jun 20 Python
np.dot()函数的用法详解
Jan 17 Python
Python json转字典字符方法实例解析
Apr 13 Python
tensorflow实现残差网络方式(mnist数据集)
May 26 Python
Python加载数据的5种不同方式(收藏)
Nov 13 Python
OpenCV-Python使用cv2实现傅里叶变换
Jun 09 Python
python神经网络Xception模型
May 06 Python
Python脚本简单实现打开默认浏览器登录人人和打开QQ的方法
Apr 12 #Python
用Python写冒泡排序代码
Apr 12 #Python
详解Python的Django框架中manage命令的使用与扩展
Apr 11 #Python
对Python的Django框架中的项目进行单元测试的方法
Apr 11 #Python
使用Python的Django框架结合jQuery实现AJAX购物车页面
Apr 11 #Python
Python的Django REST框架中的序列化及请求和返回
Apr 11 #Python
python中的错误处理
Apr 10 #Python
You might like
PHP exif扩展方法开启详解
2014/07/28 PHP
Zend Framework教程之连接数据库并执行增删查的方法(附demo源码下载)
2016/03/21 PHP
PHP中字符与字节的区别及字符串与字节转换示例
2016/10/15 PHP
php 浮点数比较方法详解
2017/05/05 PHP
PHP设计模式概论【概念、分类、原则等】
2020/05/01 PHP
js setTimeout 常见问题小结
2013/08/13 Javascript
js中call与apply的用法小结
2013/12/28 Javascript
使用typeof判断function是否存在于上下文
2014/08/14 Javascript
JavaScript的9种继承实现方式归纳
2015/05/18 Javascript
基于JavaScript的操作系统你听说过吗?
2016/01/28 Javascript
Bootstarp基本模版学习教程
2017/02/01 Javascript
详解nodejs中exports和module.exports的区别
2017/02/17 NodeJs
十大热门的JavaScript框架和库
2017/03/21 Javascript
vue-cli+iview项目打包上线之后图标不显示问题及解决方法
2019/10/16 Javascript
详解ES6数组方法find()、findIndex()的总结
2020/05/12 Javascript
在vue项目中 实现定义全局变量 全局函数操作
2020/10/26 Javascript
[44:40]KG vs LGD 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python过滤字符串中不属于指定集合中字符的类实例
2015/06/30 Python
将Python的Django框架与认证系统整合的方法
2015/07/24 Python
python opencv 直方图反向投影的方法
2018/02/24 Python
Python实现按中文排序的方法示例
2018/04/25 Python
Python循环结构的应用场景详解
2019/07/11 Python
django中SMTP发送邮件配置详解
2019/07/19 Python
Python 操作 ElasticSearch的完整代码
2019/08/04 Python
python urllib爬虫模块使用解析
2019/09/05 Python
Python实现曲线拟合的最小二乘法
2021/02/19 Python
美国东北部户外服装和设备零售商:Eastern Mountain Sports
2016/10/05 全球购物
伦敦时尚生活的缩影:LN-CC
2017/01/24 全球购物
西班牙英格列斯百货法国官网:El Corte Inglés法国
2017/07/09 全球购物
中国首家奢侈品O2O网购平台:第五大道奢侈品网
2017/12/14 全球购物
DERMAdoctor官网:美国著名皮肤护理品牌
2019/07/06 全球购物
用C或者C++语言实现SOCKET通信
2015/02/24 面试题
遇到的Mysql的面试题
2014/06/29 面试题
转党组织关系介绍信
2014/01/08 职场文书
小学数学教师研修日志
2015/11/13 职场文书
Python Pandas 删除列操作
2022/03/16 Python