Python脚本实现虾米网签到功能
作者:liushuaikobe 发布时间:2021-11-23 14:37:53
本文实例讲述了Python脚本实现虾米网签到功能的方法。分享给大家供大家参考,具体如下:
概述
这个脚本完成了自动登录虾米网、签到的功能。
大致要用到urllib、urllib2、cookielib这几个模块。其实就是用python实现向指定的url去post数据。
至于我怎么知道在浏览器里面登录和签到时浏览器都向服务器post了什么数据的问题,可以用强大的chrome:F12->Network里面可以看得到。有的服务器登录成功后会让客户端浏览器跳转或者立即刷新一次页面等等,会把登录时向服务器post的数据刷没掉,那么就要用到强大的抓包软件——WireShark来分析。比如用chrome:
然后就可以写了,构造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()
然后运行一下脚本就可以登录、签到了。
后记
有的Discuz!论坛据说是为了防止用户用网页之外的途径向服务器post数据,服务器在每个用户每次登录成功后生成一个叫formhash的值,作为表单的隐藏域返回给客户端(服务端也有保存)。
客户端在向服务器post数据的时候,这个值会作为表单的一项数据“神不知鬼不觉”(因为是表单的隐藏域)地一同post过去,服务端收到客户端的post请求后,和服务端的formhash值作对比,就能知道是否是通过浏览器页面的方式post的数据了。
不过如果真的是为了防止这,这个做法真的有用吗?我试了一下,只需用简单的正则分析下登录成功返回的html,找到formhash值,再用上述方法和理论post过去即可,成功的完成了签到的功能。
反正不管怎么说,就是用脚本“假装”地完成了一下用浏览器登录并签到的过程。
附:由于网站可能进行改版或升级,那么向服务器中post的数据可能会有变化,那么就要对代码进行相应调整,故代码仅供研究和学习参考之用。
希望本文所述对大家Python程序设计有所帮助。


猜你喜欢
- 摘要主要是介绍python 的回调函数callback。什么是回调函数当程序运行是,一般情况下,应用程序会时常通过API调用库里所预先备好的
- 将 HTML 网页转换为 PDF 是很多人常见的一个需求,在浏览器上,我们可以通过浏览器的“打印”功能直接将网页打印输出为 PDF。但是如果
- 1、炫酷星空登录实现代码<!DOCTYPE HTML><html><head><meta http
- 本文实例为大家分享了python实现抠图给证件照换背景的具体代码,供大家参考,具体内容如下import cv2import numpy as
- 本文实例为大家分享了vue文件树组件的实现方法,供大家参考,具体内容如下本文主要是分析vue官方仓库里的文件树组件[vue github]d
- 最近在用fso,读取txt文本文件的内容时碰到了“输入超出了文件尾 ”的运行错误,当txt中的内容为空的时候就出现这个问题了,查了
- Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。这篇文章使用tk
- 本文实例为大家分享了js实现滑动进度条效果的具体代码,供大家参考,具体内容如下进度条:<!DOCTYPE html><ht
- 前言特别说明: 本文只适合新手学习这篇文章带我们入门go语言的定义变量的方式,其实和javascript很相似,所以特意总结在此。在go语言
- 前言1.工作中,经常需要合并多个Excel文件。如果文件数量比较多,则工作量大,易出错,此时,可以使用Python来快速的完成合并。2.使用
- 1. top命令和日志方式判定卡死的位置python代码忽然卡死,日志不输出,通过如下方式可以确定线程确实已经死掉了:# top 命令top
- 1. Numpy(Numberical Python)Anaconda中已经集成了NumPy,可以直接使用。如果想要自行安装的话,可以使用流
- 前言在前端开发过程中,关于JS逻辑相关的使用相比都不陌生,尤其是在日常开发中使用到的常用的逻辑内容,如倒计时的使用、点击时间放重复点击、生成
- 本文实例为大家分享了wxPython整点报时的具体代码,供大家参考,具体内容如下# C盘要有个wav文件,内含报时音频import wx &
- 本文实例讲述了Python实现合并同一个文件夹下所有txt文件的方法。分享给大家供大家参考,具体如下:一、需求分析合并一个文件夹下所有txt
- DataFrame对象的创建,修改,合并import pandas as pdimport numpy as np创建DataFrame对象
- 跑模型和测试一些批量操作时,常常需要一个或多个文件中的文件的命名格式具有一定的规律。有时候获取的数据又是从一些网站爬取下来的,数据名具有一定
- 这主要是写给我自己的,防止以后入坑,耗费时间。本文主要谈的是怎样安装Python解释器和Python开发工具PyCharm。 本机系统
- MySQL低调宣布它将不再把MySQL企业版服务器作为一个tar包发布,而这距离这个公司宣布将MySQL分为免费版和付费版的时间还不到一年。
- 获取不带扩展名的文件的名称:import osprintos.path.splitext("path_to_file")