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 相关文章推荐
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
Sep 19 Python
Python时间获取及转换知识汇总
Jan 11 Python
python:socket传输大文件示例
Jan 18 Python
Python读取word文本操作详解
Jan 22 Python
python实现K近邻回归,采用等权重和不等权重的方法
Jan 23 Python
在django admin中添加自定义视图的例子
Jul 26 Python
使用Matplotlib 绘制精美的数学图形例子
Dec 13 Python
python3中sorted函数里cmp参数改变详解
Mar 12 Python
Python sklearn中的.fit与.predict的用法说明
Jun 28 Python
浅谈优化Django ORM中的性能问题
Jul 09 Python
python如何支持并发方法详解
Jul 25 Python
一劳永逸彻底解决pip install慢的办法
May 24 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基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
2014/07/11 PHP
php实现比较两个字符串日期大小的方法
2015/05/12 PHP
php使用timthumb生成缩略图的方法
2016/01/22 PHP
认识延迟时间为0的setTimeout
2008/05/16 Javascript
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
JavaScript中的函数嵌套使用
2015/06/04 Javascript
js实现的下拉框二级联动效果
2016/04/30 Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
2017/02/17 Javascript
EasyUI为Numberbox添加blur事件的方法
2017/03/05 Javascript
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
2017/03/25 jQuery
微信小程序非swiper组件实现的自定义伪3D轮播图效果示例
2018/12/11 Javascript
JS实现返回上一页并刷新页面的方法分析
2019/07/16 Javascript
Layui给switch添加响应事件的例子
2019/09/03 Javascript
简述:我为什么选择Python而不是Matlab和R语言
2017/11/14 Python
对Python使用mfcc的两种方式详解
2019/01/09 Python
django query模块
2019/04/20 Python
Python中psutil的介绍与用法
2019/05/02 Python
Python中变量的输入输出实例代码详解
2019/07/28 Python
Python中生成一个指定长度的随机字符串实现示例
2019/11/06 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
2020/04/22 Python
Python调用高德API实现批量地址转经纬度并写入表格的功能
2021/01/12 Python
Python如何实现Paramiko的二次封装
2021/01/30 Python
CSS3绘制六边形的简单实现
2016/08/25 HTML / CSS
CSS3 border-radius圆角的实现方法及用法详解
2020/09/14 HTML / CSS
MADE法国:提供原创设计师家具
2018/09/18 全球购物
Michael Kors香港官网:美国奢侈品品牌
2019/12/26 全球购物
如何打印出当前源文件的文件名以及源文件的当前行号
2015/04/05 面试题
linux面试题参考答案(7)
2014/07/24 面试题
不同浏览器创建XMLHttpRequest方法有什么不同
2014/11/17 面试题
医药工作者的求职信范文
2013/09/21 职场文书
出生证明公证书
2014/04/09 职场文书
新学期开学演讲稿
2014/05/24 职场文书
新品发布会策划方案
2014/06/08 职场文书
十岁生日答谢词
2015/01/05 职场文书
教师评职称工作总结2015
2015/04/20 职场文书
聊一聊python常用的编程模块
2021/05/14 Python