轩然大佬给的方法,仅整理成文进行分享
学校组织了这么个活动
但是我又没有什么七大姑八大姨的,怎么得奖呢?
答案是——刷票
首先可以看到这个网站的判断机制是本地的 Session
那么最暴力的办法就是打开浏览器无痕模式,重复投票
那么现在问题来了,能不能做到自动化?
简单抓包后可以发现这两个Data 值至关重要
那么简单地用 Python 写个小脚本就完事了
(混淆年级参数是由于一次只能投三票,所以在给定的年级随机抽取班级投票,就不会影响到刷票班级的名次了)
想要脚本?您在想桃子!
12 月 14 号更新
12 月 15 号更新
写代码的时候忘记截图了,幸亏在学校胡老师那里问到了网站源码。简要写下教程
首先是班级代码查找,其实每个班级的 html 标签里面自带了一个for的参数其实也可以在投票的时候抓包记录
<label for="@("xx"+item.id)"> @Html.Raw(item.xxname+" "+item.shenhe.ToString()) </label>
使用强大的BeautifulSoup 爬虫,可以非常简单地获取
soup1 = BeautifulSoup(req_get.text, "html5lib")
lable_list = soup1.find_all("label")
for label in lable_list:
print(label.get("for")[2:5], end=" ")
但是碍于投票机制是一次只能投三个班级,并且不能重复,于是就有了混淆年级选项。
原理很简单,就是在选定年级获取两个班级投票,这样平均分给一个年级就不会影响刷票班级了
if confuse == "1":
vote_id2 = random.randrange(134, 137)
vote_id3 = random.randrange(vote_id2 + 1, 141)
elif confuse == "2":
vote_id2 = random.randrange(142, 145)
vote_id3 = random.randrange(vote_id2 + 1, 149)
elif confuse == "3":
vote_id2 = random.randrange(150, 153)
vote_id3 = random.randrange(vote_id2 + 1, 157)
最麻烦的是Token,第一天误以为是藏在Cookies 里面,找了好久,最后请教了轩然大佬,原来是隐藏在一个input 标签里
好家伙,其实是这句话
<input type="hidden" value="@hd.huodongid" name="hdid" />
继续爬虫
tmp_token = soup2.input.get('value')
最后Post一下,一次投票就完成了
post_data = (
("__RequestVerificationToken", tmp_token),
("hdid", "8"),
("xxs", int(vote_id1)),
("xxs", vote_id2),
("xxs", vote_id3),
)
res_post = ses.post("http://42.192.199.237/mng/Author/Toupiao/8", data=post_data)
附上源码下载地址(已失效)