【编程之美01期】编程黑科技-如何用脚本抢月饼



经过原作者的评选:本周PengTan被选中,获得大礼包一份,下周我们继续!!重要的是学习知识,我们的编程之美群里每周都会分享源码,一周一个小项目,本次评选虽然结束了,但是后看到此贴的依然可以留言自己的代码~

中秋节前夕,公司为内部员工提供了在线抢月饼的活动……

%e6%9c%88%e9%a5%bc

公司里,恰好有一位调皮的程序员……

%e5%b0%8f%e4%bb%93%e9%bc%a0%e7%be%a1%e6%85%95

%e5%b0%8f%e4%bb%93%e9%bc%a0%e7%be%a1%e6%85%952

%e5%b0%8f%e4%bb%93%e9%bc%a0%e7%be%a1%e6%85%953

随后,这位调皮的员工埋头研究了一下下……

%e5%b0%8f%e4%bb%93%e9%bc%a0%e7%be%a1%e6%85%954

很快就到了抢月饼活动开始的时间,脚本的效果出人意料的好……

%e5%b0%8f%e4%bb%93%e9%bc%a0%e7%be%a1%e6%85%955

可是,事情已经没那么简单了。很快,员工被叫去约谈……

%e5%b0%8f%e4%bb%93%e9%bc%a0%e7%be%a1%e6%85%956

%e5%b0%8f%e4%bb%93%e9%bc%a0%e7%be%a1%e6%85%957

%e5%b0%8f%e4%bb%93%e9%bc%a0%e7%be%a1%e6%85%959

这位调皮员工的经历被传到网上,引起了很多人的关注。小灰和同学之间也在饶有兴致地谈论这件事……

%e5%b0%8f%e4%bb%93%e9%bc%a0%e5%af%92%e6%9a%841

%e5%b0%8f%e4%bb%93%e9%bc%a0%e5%af%92%e6%9a%842

%e5%b0%8f%e4%bb%93%e9%bc%a0%e5%af%92%e6%9a%843

%e5%b0%8f%e4%bb%93%e9%bc%a0%e5%af%92%e6%9a%844

%e5%b0%8f%e4%bb%93%e9%bc%a0%e5%af%92%e6%9a%845

首先,让我们来模拟一下当时的内部员工抢月饼活动页面。当然,真正的活动页面肯定不会这么简单,在此只是做个简化的示例:

%e6%8a%a2%e6%9c%88%e9%a5%bc%e9%a1%b5%e9%9d%a2

页面的HTML代码如下:

%e9%a1%b5%e9%9d%a2%e4%bb%a3%e7%a0%81

如何每隔一段时间让抢购按钮自动被点击呢?很简单,原生Javascript当中有一个定时器函数 setInterval,该函数有两个参数,第一个参数是想要执行的回调函数(在这里就是触发按钮点击事件的语句),第二个参数是触发执行的间隔时间(单位毫秒)。

因此,抢月饼脚本简单的实现如下:

%e8%84%9a%e6%9c%ac%e4%bb%a3%e7%a0%81

%e5%b0%8f%e4%bb%93%e9%bc%a0%e5%af%92%e6%9a%846

%e5%b0%8f%e4%bb%93%e9%bc%a0%e5%af%92%e6%9a%847

%e5%b0%8f%e4%bb%93%e9%bc%a0%e5%af%92%e6%9a%848

%e5%b0%8f%e4%bb%93%e9%bc%a0%e5%af%92%e6%9a%849

如何在页面中嵌入自己写的Javascript脚本呢?下面分别介绍一下在Chrome和Firefox两种浏览器上的操作步骤:

Chrome:

1. 打开chrome扩展程序页 – chrome://extensions

2. 将刚才的自定义脚本保存为以user.js为后缀的 .js文件,例如test.user.js,拖入扩展程序页。

3. 重启浏览器。

4. 进入月饼抢购活动页面。此时脚本已自动执行。

chrome

FireFox:

1. 下载并安装用户脚本管理插件 greasemonkey (中文翻译成“油猴子”)。

2. 重启浏览器。

3. 将刚才的自定义脚本保存为 .js文件,例如test.user.js,拖入页面空白处。

4. 进入月饼抢购活动页面。此时脚本已自动执行。

firefox

%e5%b0%8f%e4%bb%93%e9%bc%a0%e5%af%92%e6%9a%8410

%e5%b0%8f%e4%bb%93%e9%bc%a0%e5%af%92%e6%9a%8411

%e5%b0%8f%e4%bb%93%e9%bc%a0%e5%af%92%e6%9a%8412

%e5%b0%8f%e4%bb%93%e9%bc%a0%e5%af%92%e6%9a%8413

关于验证码:


在一般的网页中,为了防刷,都会在提交请求之前让用户输入动态的验证码:

%e9%aa%8c%e8%af%81%e7%a0%81

动态验证码有效防止了绝大多数JS脚本的自动提交行为。如果它的干扰线和扭曲效果实现得足够好,即使用OCR图像文字识别技术也很难破解。动态验证码的生成和验证流程如下:

%e9%aa%8c%e8%af%81%e7%a0%81%e6%b5%81%e7%a8%8b1

由于每次看到的抢购页面里的验证码都不相同,所以很难用自动化脚本攻克。可是,如果抢购页面的开发人员偷懒,只是在抢购页面里引用了固定不变的验证码图片,那么请求和验证流程就变成了下面的样子:

%e9%aa%8c%e8%af%81%e7%a0%81%e6%b5%81%e7%a8%8b2

这样一来,只要知道静态的验证码是什么,脚本就可以轻松填写正确的验证码。

%e5%b0%8f%e4%bb%93%e9%bc%a0%e5%af%92%e6%9a%8415


本文来自:玻璃猫
原文链接:http://blog.jobbole.com/106676/ 
岗位:Java开发工程师
公司:京东集团
微信公众号:梦见,搜索:dreamsee321 


“编程之美,让你爱上编程的美。”


挑战下面编程题目,
一起体验编程的乐趣!

本期题目:

用你的代码,来实现抢月饼,请写出你的核心思路+代码/脚本。(在本帖下面贴出)

之后会每期在回帖中评选一个最佳”代码牛客并送出牛客大礼包!时间为一周内,也就是说下周三之前的为有效~~

包括:
鼠标垫
+

程序员精美独家贴纸:
+

牛客独家定制T恤:



当然啦,重要的是来练习自己的编程能力,分享代码,交流技术的过程,这个过程中,你提升的不只是一点点~

为了让牛友能够更高效,更好的学习,特意为大家建了一个群:牛客编程之美源码群 595665246,只给真正想参与这个栏目和真正想学习的人开放,会在群里定期分享源码,只让真正想学习的人来参加,所以只有参与栏目(在本栏目下发出自己的代码的)才能加,加的时候备注一下牛客昵称~



栏目介绍
编程之美,是牛客网推出的新栏目,每周推出一个项目供大家练手讨论交流。
如果你有想实现的项目问题,欢迎私信牛妹~
另外!另外!如果有好玩的项目题目可以私信牛妹,一经采用有奖励哦~~

如果你有写博客或者公众号的习惯,也欢迎加牛妹qq:1037532015私信。
全部评论
擦,要不要这么萌(๑• . •๑)
点赞 回复 分享
发布于 2016-10-30 22:58
这个贴子改为 《编程之美中的“黑“”科技》 多好,你认为的牛妹?
点赞 回复 分享
发布于 2016-10-31 09:23
z
点赞 回复 分享
发布于 2016-11-01 21:27
66666666
点赞 回复 分享
发布于 2016-10-25 15:55
加载半天,没加载出来
点赞 回复 分享
发布于 2016-10-26 00:12
可以可以,一周后来这里提交代码!如果不提交,额,还是不立flag了。。(学习是给自己学的==)
点赞 回复 分享
发布于 2016-10-26 10:55
受教了,迫不及待想尝试,,,ps:贴纸好美
点赞 回复 分享
发布于 2016-10-27 08:56
这事儿是js被黑的最惨的一次233333
点赞 回复 分享
发布于 2016-10-27 08:56
这是jQuery被黑的最惨的一次
点赞 回复 分享
发布于 2016-10-27 17:19
测试脚本成功。1秒循环输出alert,弄的什么都干不了。。 另外脚本用js的时候只能用test.user.js这个有人犯和我一样的错误用其他名字来的么?
点赞 回复 分享
发布于 2016-10-27 18:31
这个专题大赞
点赞 回复 分享
发布于 2016-10-27 21:51
写过京东类似的秒杀脚本,主要是模拟请求,找到请求接口,就能搞定。
点赞 回复 分享
发布于 2016-10-31 20:13
一切都弄好,脚本不执行
点赞 回复 分享
发布于 2016-10-31 23:55
写过jd夺宝岛的拍卖....获取服务器时间在还剩2000ms的时候 循环 获取价格 核对价格是否在预期范围之内 加价后出价......然后因为网络延迟...嗯
点赞 回复 分享
发布于 2016-11-01 11:40
LOL峡谷传说:大提魔节领取末日小兵图标js代码 var s=setInterval(function(){$("#MainClick").click();},100); setTimeout(function(){clearInterval(s)},61000); 在浏览器的console中运行 地址:http://lol.qq.com/act/a20161020teemo/click.html
点赞 回复 分享
发布于 2016-11-01 15:09
页面 <body>     <h1>抢月饼活动</h1>     <div class = "button">          <button id = "rush"> 点我抢购</button>     </div>   </body>   <script type="text/javascript">       document.getElementById("rush").onclick=function(){         alert("抢购成功");       }   </script> 脚本是 window.setInterval(function(){   document.getElementById("rush").click(); },1000); 加载到chrome中,页面就可以一直在执行抢购,
点赞 回复 分享
发布于 2016-11-01 15:59
扩展程序老是被禁用怎么破~~~~
点赞 回复 分享
发布于 2016-11-01 17:39
HTML文件: <!DOCTYPE.html> <html> <head> <meta charset="utf-8"/> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>抢月饼活动</title> <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script> </head> <body> <h1>抢月饼活动</h1> <div class="button"> <button id="rush">点我抢购</button> </div> </body> <script> $(function(){ $("#rush").click(function(){ console.info("成功"); }); }); </script> </html> JS脚本文件 test.user.js    setInterval ()函数用于设定每隔指定的时间就执行对应的函数或代码 setInterval(function(){ $("#rush").trigger('click') },1000) 运行效果: 每一秒,控制台都会重复输出一句成功“”。30几秒之后(注意变化): 验证码会玩动态的... 但是没写进去,因为不知道怎么识别图形..  就写到这里吧,感谢牛客。
点赞 回复 分享
发布于 2016-11-01 18:54
小结地址: http://blog.csdn.net/zhyh1435589631/article/details/52999630 测试网页地址: http://www.zhyh2010.cn/nowcoder/program/1/ 注入脚本: setInterval( function () { $( "#clickme" ).trigger( 'click' ) }, 1000 ); chrome 插件的方法不知道为啥测试不通过
点赞 回复 分享
发布于 2016-11-01 20:06
页面: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>抢月饼</title> <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"> </script> </head> <body> <h1>抢月饼</h1> <div class="button"> <button id="rush">点我抢购</button> </div> </body> <script type="text/javascript"> $(function() { $("#rush").click(function(){ alert("抢购成功"); }) }) </script> </html> 脚本: setInterval(function(){ $("#rush").trigger("click"); },1000);
点赞 回复 分享
发布于 2016-11-01 20:14

相关推荐

17 64 评论
分享
牛客网
牛客企业服务