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之有容乃大的list(3)
Sep 15 Python
Python测试人员需要掌握的知识
Feb 08 Python
使用pandas对矢量化数据进行替换处理的方法
Apr 11 Python
Python中文件的读取和写入操作
Apr 27 Python
Python 实现Windows开机运行某软件的方法
Oct 14 Python
python自动发微信监控报警
Sep 06 Python
Python API自动化框架总结
Nov 12 Python
python getopt模块使用实例解析
Dec 18 Python
python使用SQLAlchemy操作MySQL
Jan 02 Python
pandas数据处理之绘图的实现
Jun 15 Python
Python pyecharts绘制条形图详解
Apr 02 Python
Python中Schedule模块使用详解 周期任务神器
Apr 19 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桌面中心(三) 修改数据库
2007/03/11 PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
2014/12/26 PHP
Javascript 继承机制的实现
2009/08/12 Javascript
JavaScript 继承机制的实现(待续)
2010/05/18 Javascript
jQuery实现点击标题输入详细信息
2013/04/16 Javascript
JS控制文本框textarea输入字数限制的方法
2013/06/17 Javascript
JavaScript事件委托的技术原理探讨示例
2014/04/17 Javascript
javascript实时显示北京时间的方法
2015/03/12 Javascript
第一次接触JS require.js模块化工具
2016/04/17 Javascript
JavaScript根据CSS的Media Queries来判断浏览设备的方法
2016/05/10 Javascript
Reactjs实现通用分页组件的实例代码
2017/01/19 Javascript
js Canvas绘制圆形时钟效果
2017/02/17 Javascript
ES6教程之for循环和Map,Set用法分析
2017/04/10 Javascript
JS实现针对给定时间的倒计时功能示例
2017/04/11 Javascript
微信小程序左滑动显示菜单功能的实现
2018/06/14 Javascript
微信小程序动态增加按钮组件
2018/09/14 Javascript
vue.extend与vue.component的区别和联系
2018/09/19 Javascript
vue forEach循环数组拿到自己想要的数据方法
2018/09/21 Javascript
详解Nodejs get获取远程服务器接口数据
2019/03/26 NodeJs
Jquery异步上传文件代码实例
2019/11/13 jQuery
[44:10]2018DOTA2亚洲邀请赛 4.5 淘汰赛 EG vs VP 第一场
2018/04/06 DOTA
[57:55]EG vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python的迭代器和生成器
2015/07/29 Python
pycharm 在windows上编辑代码用linux执行配置的方法
2018/10/27 Python
Python3和pyqt5实现控件数据动态显示方式
2019/12/13 Python
Python操作MySQL数据库的示例代码
2020/07/13 Python
windows系统Tensorflow2.x简单安装记录(图文)
2021/01/18 Python
加拿大最大的体育用品、鞋类和服装零售商:Sport Chek
2018/11/29 全球购物
有abstract方法的类一定要用abstract修饰吗
2016/03/14 面试题
幼儿园消防安全制度
2014/01/26 职场文书
我的职业生涯规划:打造自己的运动帝国
2014/09/18 职场文书
2014年人事科工作总结
2014/11/19 职场文书
专业技术人员年度考核评语
2014/12/31 职场文书
2015年大学社团工作总结
2015/04/09 职场文书
歌咏比赛主持词
2015/06/29 职场文书
高中优秀作文(范文)
2019/08/15 职场文书