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在hadoop上跑起来
Jan 27 Python
Python之父谈Python的未来形式
Jul 01 Python
python读取与写入csv格式文件的示例代码
Dec 16 Python
Python 查找字符在字符串中的位置实例
May 02 Python
Python爬虫框架scrapy实现的文件下载功能示例
Aug 04 Python
Python中实例化class的执行顺序示例详解
Oct 14 Python
Python面向对象之继承和多态用法分析
Jun 08 Python
PyQt5实现让QScrollArea支持鼠标拖动的操作方法
Jun 19 Python
Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题
Jul 04 Python
详解python中GPU版本的opencv常用方法介绍
Jul 24 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
Sep 03 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
Feb 20 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
thinkphp实现面包屑导航(当前位置)例子分享
2014/05/10 PHP
php图片的二进制转换实现方法
2014/12/15 PHP
PHP 生成微信红包代码简单
2016/03/25 PHP
PHP观察者模式原理与简单实现方法示例
2017/08/25 PHP
PHP文字转图片功能原理与实现方法分析
2017/08/31 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
javaScript NameSpace 简单说明介绍
2013/07/18 Javascript
对于Form表单reset方法的新认识
2014/03/05 Javascript
php的文件上传入门教程(实例讲解)
2014/04/10 Javascript
JavaScript实现的商品抢购倒计时功能示例
2017/04/17 Javascript
layui前段框架日期控件使用方法详解
2017/05/19 Javascript
浅谈struts1 & jquery form 文件异步上传
2017/05/25 jQuery
js is_valid_filename验证文件名的函数
2017/07/19 Javascript
vue中使用element-ui进行表单验证的实例代码
2018/06/22 Javascript
JavaScript的级联函数用法简单示例【链式调用】
2019/03/26 Javascript
解析vue、angular深度作用选择器
2019/09/11 Javascript
vue项目出现页面空白的解决方案
2019/10/31 Javascript
vue.js实现简单购物车功能
2020/05/30 Javascript
Python实现生成简单的Makefile文件代码示例
2015/03/10 Python
轻松实现TensorFlow微信跳一跳的AI
2018/01/05 Python
python执行系统命令后获取返回值的几种方式集合
2018/05/12 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/27 Python
python基础 range的用法解析
2019/08/23 Python
Numpy的简单用法小结
2019/08/28 Python
pytorch中的上采样以及各种反操作,求逆操作详解
2020/01/03 Python
Pycharm中切换pytorch的环境和配置的教程详解
2020/03/13 Python
Flask中sqlalchemy模块的实例用法
2020/08/02 Python
纯CSS3实现表单验证效果(非常不错)
2017/01/18 HTML / CSS
个人简历自我鉴定
2013/10/11 职场文书
工商管理专业职业生涯规划
2014/01/01 职场文书
企业安全生产月活动总结
2014/07/05 职场文书
学校政风行风评议心得体会
2014/10/21 职场文书
大学生入党自荐书
2015/03/05 职场文书
62句有关感恩节文案(推荐收藏)
2019/11/28 职场文书
MySQL中的引号和反引号的区别与用法详解
2021/10/24 MySQL
postman中form-data、x-www-form-urlencoded、raw、binary的区别介绍
2022/01/18 HTML / CSS