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使用wxpython开发简单记事本的方法
May 20 Python
在Django中创建URLconf相关的通用视图的方法
Jul 20 Python
浅析Python中的for 循环
Jun 09 Python
K-近邻算法的python实现代码分享
Dec 09 Python
Python实现的朴素贝叶斯分类器示例
Jan 06 Python
python使用opencv按一定间隔截取视频帧
Mar 06 Python
Python基于多线程操作数据库相关问题分析
Jul 11 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
Jul 10 Python
python实现知乎高颜值图片爬取
Aug 12 Python
python入门之基础语法学习笔记
Feb 08 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
Aug 26 Python
Python实现扫码工具的示例代码
Oct 09 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 stristr() 函数(不区分大小写的字符串查找)
2010/06/03 PHP
php实现过滤字符串中的中文和数字实例
2015/07/29 PHP
phalcon框架使用指南
2016/02/23 PHP
PHP 获取客户端 IP 地址的方法实例代码
2018/11/11 PHP
PHP开发的文字水印,缩略图,图片水印实现类与用法示例
2019/04/12 PHP
Laravel-admin之修改操作日志的方法
2019/09/30 PHP
js类 from qq
2006/11/13 Javascript
求数组最大最小值方法适用于任何数组
2013/08/16 Javascript
jQuery中prevAll()方法用法实例
2015/01/08 Javascript
jQuery form 表单验证插件(fieldValue)校验表单
2016/01/24 Javascript
Bootstrap每天必学之级联下拉菜单
2016/03/27 Javascript
BootStrap制作导航条实例代码
2016/05/06 Javascript
Node.js开发教程之基于OnceIO框架实现文件上传和验证功能
2016/11/30 Javascript
详解Vue.js——60分钟组件快速入门(上篇)
2016/12/05 Javascript
js按条件生成随机json:randomjson实现方法
2017/04/07 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
2018/10/01 Javascript
傻瓜式解读koa中间件处理模块koa-compose的使用
2018/10/30 Javascript
Python遍历目录中的所有文件的方法
2016/07/08 Python
Python模拟三级菜单效果
2017/09/11 Python
python实现远程通过网络邮件控制计算机重启或关机
2018/02/22 Python
python如何压缩新文件到已有ZIP文件
2018/03/14 Python
深入了解Django中间件及其方法
2019/07/26 Python
python并发编程多进程 模拟抢票实现过程
2019/08/20 Python
python写入数据到csv或xlsx文件的3种方法
2019/08/23 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
2020/01/02 Python
python之pygame模块实现飞机大战完整代码
2020/11/29 Python
python+selenium爬取微博热搜存入Mysql的实现方法
2021/01/27 Python
华为的Java面试题
2014/03/07 面试题
音乐专业应届生教师求职信
2013/11/04 职场文书
中学生检讨书范文
2014/11/03 职场文书
民间借贷纠纷案件代理词
2015/05/26 职场文书
对学校的意见和建议
2015/06/04 职场文书
不要在HTML中滥用div
2021/05/08 HTML / CSS
Python实现排序方法常见的四种
2021/07/15 Python
MySQL创建表操作命令分享
2022/03/25 MySQL
MySQL中dd::columns表结构转table过程及应用详解
2022/09/23 MySQL