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 相关文章推荐
使用django-suit为django 1.7 admin后台添加模板
Nov 18 Python
简介Python中用于处理字符串的center()方法
May 18 Python
python计算圆周率pi的方法
Jul 11 Python
通过数据库对Django进行删除字段和删除模型的操作
Jul 21 Python
使用Django Form解决表单数据无法动态刷新的两种方法
Jul 14 Python
Python2中文处理纪要的实现方法
Mar 10 Python
Sanic框架基于类的视图用法示例
Jul 18 Python
python实现汽车管理系统
Nov 30 Python
Python猴子补丁知识点总结
Jan 05 Python
Python reduce函数作用及实例解析
May 08 Python
Python collections.deque双边队列原理详解
Oct 05 Python
Python上下文管理器Content Manager
Jun 26 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 5.4 全新的代码复用Trait详解
2017/01/05 PHP
如何实现动态删除javascript函数
2007/05/27 Javascript
Query中click(),bind(),live(),delegate()的区别
2013/11/19 Javascript
jquery获得同源iframe内body下标签的值的方法
2014/09/25 Javascript
使用JavaScript判断手机浏览器是横屏还是竖屏问题
2016/08/02 Javascript
node.js中的事件处理机制详解
2016/11/26 Javascript
Vue.2.0.5过渡效果使用技巧
2017/03/16 Javascript
vue2.0实战之基础入门(1)
2017/03/27 Javascript
深入浅析ES6 Class 中的 super 关键字
2017/10/20 Javascript
解决vue-cli脚手架打包后vendor文件过大的问题
2018/09/27 Javascript
vue动态绑定class选中当前列表变色的方法示例
2018/12/19 Javascript
Javascript如何递归遍历本地文件夹
2020/08/06 Javascript
python简单实现基数排序算法
2015/05/16 Python
Python基于Tkinter的HelloWorld入门实例
2015/06/17 Python
Python抓取淘宝下拉框关键词的方法
2015/07/08 Python
Python利用Beautiful Soup模块搜索内容详解
2017/03/29 Python
Python中的id()函数指的什么
2017/10/17 Python
简单实现python收发邮件功能
2018/01/05 Python
tensorflow实现加载mnist数据集
2018/09/08 Python
Python爬虫——爬取豆瓣电影Top250代码实例
2019/04/17 Python
Django ImageFiled上传照片并显示的方法
2019/07/28 Python
python脚本执行CMD命令并返回结果的例子
2019/08/14 Python
Pytorch中Tensor与各种图像格式的相互转化详解
2019/12/26 Python
详解java调用python的几种用法(看这篇就够了)
2020/12/10 Python
浅析CSS3 用text-overflow解决文字排版问题
2020/10/28 HTML / CSS
美国高端牛仔品牌:Silver Jeans
2019/12/12 全球购物
一套比较完整的软件测试人员面试题
2012/05/13 面试题
护理毕业生自荐信范文
2013/12/22 职场文书
网上开商店的创业计划书
2014/01/19 职场文书
函授毕业个人自我评价
2014/02/20 职场文书
财务人员的自我评价范文
2014/03/03 职场文书
爱国演讲稿500字
2014/05/04 职场文书
党的生日演讲稿
2014/09/10 职场文书
趣味运动会加油词
2015/07/18 职场文书
详解redis分布式锁的这些坑
2021/05/19 Redis
如何利用python创作字符画
2022/06/25 Python