投票系统 & 简易js刷票脚本

早就听说有什么刷票脚本,微博投票等等相关的投票都有某些人去刷票。

试一下吧,兴许自己也会刷票呢?捣鼓了几个小时,终于有所眉目。

(1)投票系统

要刷票,就得先有个投票界面。

当然,可以直接去各个投票网站就行,不过这里还是自己弄个投票页面,方便自己。

页面大致如下  或者 查看演示

照理,界面很简洁,但也基本有了投票的基本功能。

原始规则是:只能投一次票,然后提示成功,然后按钮不可用。

都是原生JS,DOM操作不灵活的可以借此练练手。当然,用jq将会很便捷。

html/css部分

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<head>
<title>投票系统 & js脚本简单刷票</title>
<style type="text/css">

    *{padding: 0;margin: 0;}
    #wrap{margin: 0 auto; width:600px; text-align: center;}
    .person{position: relative; margin: 20px;  float: left;}
    .person h4,
    .person p,
    .person button{margin-bottom: 5px;}
    .person h4{color: blue;}
    .person span{color: red;}
    .person button:hover{cursor: pointer; font-weight: bold;}
    .clear{clear: both;}
</style>

</head>
<body>

<div id="wrap">
<h3>给你的小伙伴投上一票吧</h3>
    <div class="person">
        <h4>one</h4>
        <p>总票数: <span>0</span> 票</p>
        <button>给它投票</button>
    </div>
    <div class="person">
        <h4>two</h4>
        <p>总票数: <span>0</span> 票</p>
        <button>给它投票</button>
    </div>
    <div class="person">
        <h4>three</h4>
        <p>总票数: <span>0</span> 票</p>
        <button>给它投票</button>
    </div>
    <div class="person">
        <h4>four</h4>
        <p>总票数: <span>0</span> 票</p>
        <button>给它投票</button>
    </div>
    <div class="clear"></div>
</div>

js部分

 1 <script type="text/javascript">
 2 function getElemensByClassName(className){   // 通过class获取
 3     var classArr = new Array();
 4     var tags = document.getElementsByTagName("*");  //获取所有节点
 5     for(var item in tags){
 6         if(tags[item].nodeType == 1){
 7         if(tags[item].getAttribute("class") == className){
 8             classArr.push(tags[item]);  //收集class匹配的节点
 9         }
10     }
11 }
12     return classArr;
13 }
14
15 function delete_FF(element){   // 在FireFox中删除子节点为空的元素
16     var childs = element.childNodes;
17     for(var i=0;i<childs.length;i++){
18         var pattern = /\s/;  //模式匹配,内容为空
19         if(childs[i].nodeName == "#text" && pattern.test(childs[i].nodeValue)){   //处理
20             //alert(childs[i].nodeName);
21             element.removeChild(childs[i]);  //删除FF中获取的空节点
22         }
23     }
24 }
25
26 window.onload = function(){
27     var persons = getElemensByClassName("person");
28 //    alert(persons);
29     for(var item in persons){   //遍历所有person,为它们绑定投票事件
30         (function(_item){       //匿名函数传入item, 防止因作用域问题导致item总为最后一个
31         delete_FF(persons[_item]);  //出去FF中空行代表的子节点
32         persons[_item].setAttribute("id","person"+(parseInt(_item)+1));  //赋上id
33
34         var childs = persons[_item].childNodes;
35         for(var i = 0;i<childs.length;i++){
36             //alert(childs[i].nodeName);
37             if(childs[i].nodeName == "BUTTON"){   //点击按钮投票
38                 var oButton = childs[i];
39             }
40             if(childs[i].nodeName == "P"){   //投票结果更新
41                 var oP = childs[i];
42                 var oSpan = oP.getElementsByTagName("span")[0];
43             }
44         }
45         if(oButton != null){
46         oButton.onclick = function(){   //事件绑定
47             var num = oSpan.innerHTML;  //获取票数
48             oSpan.innerHTML = (++num);  //票数更新
49                                         // 这时一般我们可能就需要把这个票数num传送给服务器保存,更新时也是和服务器中的num同步
50             this.setAttribute("disabled","true");  // 一般只能投票一次的吧
51             alert("投票成功,谢谢您的支持");
52         };
53     }
54 })(item);  // 传入各项person
55     }
56 };
57 </script>

注释应该比较清晰了,一个简单的投票页面。

(2)刷票脚本实现

刷票脚本,意思就是通过脚本实现投票,怎么实现投票?

通过上面的代码我们知道一般投票就是点击“投票”,从而数据得到处理。

前端有一个票数统计num,后端也有一个票数统计num,它们是同步的,我们无需理会后端的num,因为前端和后端是同步的。

click事件触发时候,js自然会将num同步好。我们要刷票,其实就是触发click事件就行了。

而且,投票系统是别人的页面,我们也无权修改,我们能做的,其实也就是通过js模拟事件的发生。

那自己写好脚本了,该怎么用?

一般就是使用控制台模式,比如FireFox  Chrome的控制台,把自己写的脚本放进去,它自会解析执行,处理页面数据。

比如这里的FireBug的控制台里头,左边就是信息展示,右边可以输入js代码。

或者用chrome的控制台也可以,在里边输入js回车执行就好

如果还没使用过这些东西的童鞋可以去搜一下相关知识。

那就写一个简单的刷票脚本吧

首先,我们按照正规方式,假设投票页面不是我们写的,我们要怎么刷票?

我们必然要找出投票的关键点。

用审查元素找一下吧,一般就是那个投票按钮。

点击那个,然后把鼠标移动到投票页面的按钮试试?在页面中搜寻其他标签信息,比如id class等等,方便等会用到。

好,确定好相关信息,id 标签类型等等。

现在,我想给two刷票,每两秒钟就给他投一次。我的目的是让two的总票数要保持大于three的(当然,随你怎么想)

那就开始写代码吧,习惯了jquery,在控制台中也可以直接使用。

或者再旧版本一点的不支持jquery的话,就在代码里边加上:

javascript:(function(url) {
    var s = document.createElement(‘script‘);
    s.src = url;
    (document.getElementsByTagName(‘head‘)[0] ||
        document.getElementsByTagName(‘body‘)[0]).appendChild(s);
})(‘http://code.jquery.com/jquery-2.1.3.js‘);

      【正式开始】

1.写一个通用刷票函数

 1 function brushVotes(){   //刷票函数
 2 var t = setInterval(function(){
 3   var three_num = $("#person3>p>span").text();  //three票数
 4   var two_num   = $("#person2>p>span").text();   // two票数
 5   console.info(two_num+"  "+three_num);
 6
 7   if(two_num - three_num < 5){   //要保持领先5票的优势
 8     $("#person2>button").click().attr("disabled",false); //触发投票的事件click,投完后记得把投票权限拿回来
 9   }
10   if(two_num - three_num == 5){  //5票领先了就此打住
11     clearInterval(t);
12   }
13
14 },2000);
15 }

使用一个定时器,每两秒执行一次投票事件。领先5票后就暂停。

2.调用刷票函数

初始调用一次,点击运行时,脚本自然就执行了。

然后监听three票数的改变,作出绑定处理。

普通的change事件只有那些表单相关的标签元素才能支持的。我们当然可以把票数中的span改为input标签,让它拥有onchange事件。

但页面是别人的,我们改不了。

所以找啊找,终于找到检测其他诸如div span 等标签内容改变的方法。如果想深入理解这种方法 welcome

brushVotes();  // 刷票
$("#person3>p>span").bind(‘DOMNodeInserted‘, function(e) { //three改变则 触发
  brushVotes(); //继续刷票
});

这样一来,three票数改变了,就会自动触发继续刷票。

完整脚本 

javascript:(function(url) {
    var s = document.createElement(‘script‘);
    s.src = url;
    (document.getElementsByTagName(‘head‘)[0] ||
        document.getElementsByTagName(‘body‘)[0]).appendChild(s);
})(‘http://code.jquery.com/jquery-2.1.3.js‘);

brushVotes();  // 刷票
$("#person3>p>span").bind(‘DOMNodeInserted‘, function(e) { //three改变则 触发
  brushVotes(); //继续刷票
});

function brushVotes(){   //刷票函数
var t = setInterval(function(){
  var three_num = $("#person3>p>span").text();  //three票数
  var two_num   = $("#person2>p>span").text();   // two票数
  console.info(two_num+"  "+three_num);

  if(two_num - three_num < 5){   //要保持领先5票的优势
    $("#person2>button").click().attr("disabled",false); //触发投票的事件click,投完后记得把投票权限拿回来
  }
  if(two_num - three_num == 5){  //5票领先了就此打住
    clearInterval(t);
  }

},2000);
}

      【最后,模拟一下】

1.进入投票页面,调出Firebug,在控制台右边代码输入区键入完整代码

2.然后先点击左上角的运行,先让two从零开始刷到5. 比three领先5票

这样一直alert到5次

3.然后,模拟性的有人给three投了一票,点击three的按钮

4.检测到three票数有变化了,two继续刷票

5. 最后,刷到6票又暂停了

------------------------------------------------------------------------------------------------------

这就是简单的刷票脚本实现。

通过这个最主要的是要学会怎么使用自己的脚本去操作别人的页面。当然,这和所谓的脚本注入不是一回事..

我们做的只是模拟正常页面的事件,人工的去触发它们。

通过这种机制,不仅可以进行投票系统的刷票,也可以进行暴力验证登录啊..但遇到验证码就亏大发了,也可以所谓的火车票抢票脚本啊..不过那应该涉及到更多知识了。

时间: 2024-10-12 02:33:59

投票系统 & 简易js刷票脚本的相关文章

投票系统——爬虫+容器克隆技术

序:昨天是所谓的单身狗节,作为一名不折不扣的程序员,高级程序员,怎么能有女票呢是吧,所以我苦逼的去了公司开发我的项目 大概到下午,我当天的开发到了尾声,仔细想想别人都去逛街约炮去了,我堂堂一名程序员弄啥雷,于是我想找点乐子,我找了实验室的好基友(单身狗程序员一只)准备商讨出去浪的想法,刚想发信息,一想最近工资没发,钱不够不能出去浪啊,寻思着找啥乐子,突然一个灵感划过脑海,要不做个校花评选系统找理工的校花吧,但是照片哪来呢,大一时天真的认为让他们自己交出照片,想想这么逗比的行为不现实了,那么只能做

关于投票系统刷票方式原理(突破ip限制刷票PHP版)

先说一点:其实不算是突破ip限制,因为事实上,这个限制是在服务器端的,客户端在牛逼,也突破不了..只是可以一直刷多次票罢了 一个朋友突然发了一个网站,让我帮她投投票..我这人一项比较好说话,就帮她投了.顺便分析了这个网站,发现这个网站的投票系统有ip限制,但是投票是一个ajax请求.那么办法就出来了. 很多投票PC网站都是依靠限制ip,来限制投票人数.那么我用curl伪造IP,那么就可以轻易制造多个IP进行投票. 下面贴上PHP代码: 由于对方是GET AJAX请求,我这里就贴上GET方法,PO

以太坊 DApp 开发入门实战! 用Node.js和truffle框架搭建——区块链投票系统!

第一节 概述 面向初学者,内容涵盖以太坊开发相关的基本概念,并将手把手地教大家如何构建一个 基于以太坊的完整去中心化应用 -- 区块链投票系统. 通过学习,你将掌握: 以太坊区块链的基本知识 开发和部署以太坊合约所需的软件环境 使用高级语言(solidity)编写以太坊合约 使用NodeJS编译.部署合约并与之交互 使用Truffle框架开发分布式应用 使用控制台或网页与合约进行交互 前序知识要求 为了顺利完成,最好对以下技术已经有一些基本了解: 一种面向对象的开发语言,例如:Python,Ru

刷票的在线投票系统代码

投票是非常多的网站是基于ip住址.不同ip地址每天一次投票 以下代码是使用curl扩展伪造ip住址 实现无限制投票. $times = $_POST['times']; //投票次数 $url = $_POST['url']; //投票地址[某个选手下方投票button的链接] while ($times) { $ip1 = 'X-FORWARDED-FOR:'.rand(115,225).'.'.rand(115,225).'.'.rand(115,225).'.'.rand(115,225)

网上投票系统刷票代码

很多网站上的投票依据是ip地址,不同的ip地址一天可投票一次 下面的代码就是利用curl扩展来伪造ip地址 达到无限制投票: $times = $_POST['times']; //投票次数 $url = $_POST['url']; //投票地址[某个选手下方投票按钮的链接] while ($times) { $ip1 = 'X-FORWARDED-FOR:'.rand(115,225).'.'.rand(115,225).'.'.rand(115,225).'.'.rand(115,225)

微信投票系统 开发

公众号发起投票,无疑是吸粉涨粉的一项大杀器,各类萌宝投票,最美投票总是火爆朋友圈,组织方公众号的粉丝也是噌噌向上涨. 本文一步一步向您介绍开发公众号投票系统的详细过程,并在最后给出DEMO以供参考 ,为免广告嫌疑,本文能不贴图的都不贴图了,见谅. 公众号投票系统的原理并不复杂,用户发布或者管理员后台发布待投票的项目,手机端用户在微信上浏览H5页面,进行投票. 这其中几个关键点在于: 1.微信端用户鉴权识别用户身份,以防刷票. 2.发布投票项目时,使用微信 JS SDK 进行图片的上传. 3.后台

(五)基于区块链的投票系统的设计与实现

1.需求分析 1.1 用户群体分析 需要进行投票表决的学校小团体.商业董事会群体.政府人员等. 1.2 系统用途概述 本系统是一个基于区块链技术的线上投票系统.针对目前线上投票系统中出现的恶意刷票.数据安全.隐私泄露等问题,本系统结合区块链技术的去中心化.数据不可篡改.可匿名性等特点,可以保证投票系统的投票数据公正.公开.可验证.不可篡改,提高投票系统的可信任性.用户可以通过本系统进行投票项目的创建.规定投票时间.注册投票等操作,系统同时提供投票数据可追溯可验证的功能,旨在给用户构建一个更加高效

老八系统简易调用AJAX

<script src="js/jquery-1.7.2.min.js"></script> <script> $(function(){ $("#txtaccount").blur(function(){ $.post("check.asp", { name:$(this).val(), type:"tjnickname" }, function(data,status){ if(data

【php】使用jpgraph完成投票系统的普通用户部分

本文接上一篇<[php]投票系统管理员部分,增加投票与删除投票>(点击打开链接) 上次三个链接只完成了管理员部分的两个 现在完成最后的一个普通用户这一个,同样是没有登录系统部分,请自行补充 一.基本目标 投票系统的普通用户部分如下图所示: 首先显示现存的投票列表给用户,之后,点击进入其中一个投票,能够投票 投票皆为单选,不设定为多选,当然,你设置为多选也行,反正每一页都是一个表单, 点击"投票"按钮则,询问用户是否确定,是则投票成功哦,否则不发生任何事 当投票的任何一项都大