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实现的登录和操作开心网脚本分享
Jul 09 Python
python subprocess 杀掉全部派生的子进程方法
Jan 16 Python
python实现用户管理系统
Jan 10 Python
python如何定义带参数的装饰器
Mar 20 Python
Python基础学习之类与实例基本用法与注意事项详解
Jun 17 Python
Python Django 前后端分离 API的方法
Aug 28 Python
tensorflow 模型权重导出实例
Jan 24 Python
virtualenv介绍及简明教程
Jun 23 Python
在pytorch中动态调整优化器的学习率方式
Jun 24 Python
python+requests接口自动化框架的实现
Aug 31 Python
python实现层次聚类的方法
Nov 01 Python
如何Python使用re模块实现okenizer
Apr 30 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
FirePHP 推荐一款PHP调试工具
2011/04/23 PHP
PHP curl CURLOPT_RETURNTRANSFER参数的作用使用实例
2015/02/07 PHP
PHP处理bmp格式图片的方法分析
2017/07/04 PHP
JS判断元素为数字的奇异写法分享
2012/08/01 Javascript
jQuery遍历页面所有CheckBox查看是否被选中的方法
2015/04/14 Javascript
JQuery节点元素属性操作方法
2015/06/11 Javascript
JS制作手机端自适应缩放显示
2015/06/11 Javascript
Bootstrap学习笔记之css组件(3)
2016/06/07 Javascript
原生js实现查询天气小应用
2016/12/09 Javascript
JS正则表达式修饰符global(/g)用法分析
2016/12/27 Javascript
基于js 字符串indexof与search方法的区别(详解)
2017/12/04 Javascript
基于datepicker定义自己的angular时间组件的示例
2018/03/14 Javascript
vue 解决addRoutes动态添加路由后刷新失效问题
2018/07/02 Javascript
浅谈vue加载优化策略
2019/03/19 Javascript
JavaScript实现原型封装轮播图
2020/12/27 Javascript
[02:33]DOTA2英雄基础教程 司夜刺客
2013/12/04 DOTA
[53:49]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python 链接和操作 memcache方法
2017/03/04 Python
Pycharm设置utf-8自动显示方法
2019/01/17 Python
python 矢量数据转栅格数据代码实例
2019/09/30 Python
python中元组的用法整理
2020/06/15 Python
Python切片列表字符串如何实现切换
2020/08/06 Python
使用Python提取文本中含有特定字符串的方法示例
2020/12/09 Python
canvas实现圆形进度条动画的示例代码
2017/12/26 HTML / CSS
Hawes & Curtis澳大利亚官网:英国经典服饰品牌
2018/10/29 全球购物
英文导游欢迎词
2014/01/11 职场文书
简历自我评价模版
2014/01/31 职场文书
学习十八大演讲稿
2014/09/15 职场文书
六一儿童节致辞稿(3篇)
2019/07/11 职场文书
再读《皇帝的新衣》的读后感悟!
2019/08/07 职场文书
2019年中学生的思想品德评语集锦
2019/12/19 职场文书
深入解析NumPy中的Broadcasting广播机制
2021/05/30 Python
仅用几行Python代码就能复制她的U盘文件?
2021/06/26 Python
Python中npy和mat文件的保存与读取
2022/04/24 Python
Win11右下角图标点了没反应怎么办?Win11点击右下角图标无反应解决方法汇总
2022/07/07 数码科技