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的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
Jun 14 Python
Django学习笔记之Class-Based-View
Feb 15 Python
Odoo中如何生成唯一不重复的序列号详解
Feb 10 Python
python的dataframe和matrix的互换方法
Apr 11 Python
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
May 22 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
Oct 28 Python
导入tensorflow时报错:cannot import name 'abs'的解决
Oct 10 Python
python实现局域网内实时通信代码
Dec 22 Python
python操作cfg配置文件方式
Dec 22 Python
pytest进阶教程之fixture函数详解
Mar 29 Python
python库sklearn常用操作
Aug 23 Python
python中对列表的删除和添加方法详解
Feb 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生成zip压缩文件的方法详解
2013/06/09 PHP
php二分查找二种实现示例
2014/03/12 PHP
ThinkPHP模版中导入CSS和JS文件的方法
2014/11/29 PHP
php中使用gd库实现远程图片下载实例
2015/05/12 PHP
php socket通信(tcp/udp)实例分析
2016/02/14 PHP
PHP实现json_decode不转义中文的方法
2017/05/20 PHP
PHP进阶学习之垃圾回收机制详解
2019/06/18 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
2020/09/17 PHP
javascript+dom树型菜单类,希望朋友们一起进步
2007/05/03 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
在jQuery中使用$而避免跟其它库产生冲突的方法
2015/08/13 Javascript
js 原型对象和原型链理解
2017/02/09 Javascript
vue组件如何被其他项目引用
2017/04/13 Javascript
Angular directive递归实现目录树结构代码实例
2017/05/05 Javascript
bootstrap table单元格新增行并编辑
2017/05/19 Javascript
Angular2生命周期钩子函数的详细介绍
2017/07/10 Javascript
fetch 使用及如何接收JS传值
2017/11/11 Javascript
Vue表单及表单绑定方法
2018/09/04 Javascript
浅谈Vue.js 关于页面加载完成后执行一个方法的问题
2019/04/01 Javascript
详解element-ui级联菜单(城市三级联动菜单)和回显问题
2019/10/02 Javascript
JS代码触发事件代码实例
2020/01/02 Javascript
vue使用vant中的checkbox实现全选功能
2020/11/17 Vue.js
Python备份目录及目录下的全部内容的实现方法
2016/06/12 Python
Python+MongoDB自增键值的简单实现
2016/11/04 Python
基于Django URL传参 FORM表单传数据 get post的用法实例
2018/05/28 Python
python PyQt5/Pyside2 按钮右击菜单实例代码
2019/08/17 Python
Python 用三行代码提取PDF表格数据
2019/10/13 Python
基于PyQT实现区分左键双击和单击
2020/05/19 Python
解决python3.6用cx_Oracle库连接Oracle的问题
2020/12/07 Python
PyChon中关于Jekins的详细安装(推荐)
2020/12/28 Python
HTML5新表单元素_动力节点Java学院整理
2017/07/12 HTML / CSS
全球速卖通巴西站点:Aliexpress巴西
2016/08/24 全球购物
给实习单位的感谢信
2014/02/01 职场文书
护士在校生自荐信
2014/02/01 职场文书
2014全年工作总结
2014/11/27 职场文书
基于nginx实现上游服务器动态自动上下线无需reload的实现方法
2021/03/31 Servers