//blog/tags/about/friends

记一次英语节投票活动

- code python web vote

轩然大佬给的方法,仅整理成文进行分享

学校组织了这么个活动

但是我又没有什么七大姑八大姨的,怎么得奖呢?
答案是——刷票

首先可以看到这个网站的判断机制是本地的 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)

附上源码下载地址(已失效)