一个自动投票脚本

2019-07-04

写在前面:网络投票毫无意义。 写个脚本自动投票比转发各个群请求别人帮忙手动投票在道德意义上更低级吗? 写个脚本自动投票比根据投票规则手动修改ip/修改id进行投票更低级吗?

所以对于小侄女的学校让家长投票这件事,我试着写了个脚本。这篇blog倾向于不透露网站信息, 只做一个步骤上的介绍。

首先,弄清楚这个投票网站是在用什么样的方法限制投票。Fortunately, 这个投票不需要任何id,只有ip限制, 每24h每个ip只能投一次票,所以只要想办法更换ip就可以了。爬虫领域有很多ip代理教程可以搜的到。

这是一个成功率比较高的免费代理网站(大约50%的成功几率)。 http://free-proxy.cz/zh/

其次,找到“真正的投票”链接。用开发者工具看一下网页代码,找到投票的地方,呃,这是个javascript,感觉有点超纲了……

‘’‘ 我要投票 ’‘’

这里的11111是作品代号,bbbbb是作品名,这两个信息是可以直接获得的。

在开发者工具下,点击“我要投票”,在NetWork的XHR里出现里一个新的链接,测试发现这个链接就是“真正的”投票地址, 而且在每次投票中不变。看上去事情又简单了一些【好吧,仔细看了下面的js function,发现它就是里边的url】

接下来就要找,到底需要传入什么样的参数才能投票成功。仔细看一下对应的javascript函数和按下“我要投票”按钮时实际传入的内容。

‘’‘ function govote(id, name, type) { var str = ‘’; var token = $(“meta[name=’hash’]”).attr(‘content’); var settoken = $(“#token”).val(); var code = $(“#chk_vcode”).val(); var show = $(“#show”).val();

$.ajax({
    url: "/vote/sing",          
    data: {id: id, name: name, __hash__: token, code: code, show: show, settoken: settoken, type: type},
    type: "POST",
    success: function (msg) {
        // if(msg.code==5){
        //     alert("token失效,请刷新后再次尝试");
        // }
        if (msg.code == 4) {
            alert("验证码错误,请重新输入");
        }
        if (msg.code == 2) {
            alert("系统发现票数异常增长,关闭投票功能");
        }
        if (msg.code == 1) {
            str = '<span>' + msg.wscore + '票</span>' + '<span class="goVote" >已投过票</span>' + '<span class="briefRed" onclick="javascript:detail();">投票规则</span>';
            $("#score").html(str);
        }
        if (msg.code == 0) {
            str = '<span>' + msg.wscore + '票</span>' + '<span class="goVote" >已投过票</span>' + '<span class="briefRed" onclick="javascript:detail();">投票规则</span>';
            $("#score").html(str);
        }

    }
}) } ’‘’‘

#是在jquery里面的id选择器,比如$(“#name”)就相当于js里面的document.getElementByID(“name”),获取name元素;$(“#name”).val()则 是获取name的值。

再看一下按下“我要投票”按钮时实际传入的内容:

‘’‘ id: 11111 name: bbbbb hash: f0e15c6f42568415ad5ffa4247624566_05ecd1f3c2f1aaa84e5a287bfef9a3e6 settoken: type: 1 ’‘’

实际上,只需要在网页上找到meta的__hash__对应的content值,做为传入参数就可以了。 构建一个data字典,最终用这种方式实现自动投票:

’‘’python response = requests.post(url, proxies=proxies, headers = headers, data = data) ‘’‘

tada~~