IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    记一次英语节投票活动

    Jsun Dot LOL发表于 2020-12-22 00:00:00
    love 0

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

    学校组织了这么个活动

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

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

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



沪ICP备19023445号-2号
友情链接