JS实现网页抢购功能(触发,终止脚本)


Posted in Javascript onNovember 27, 2017

以下我们是通过chrome浏览器的开发者功能,实现如何用JS代码完成抢购功能以及如何通过chrome浏览器调试并加载自己写的JS。

身为一名前端开发工程师,有时候业务场景是无法用手速模拟的,老司机也有翻车的时候【你懂得】。因此我特意写这一篇文章,希望能够对大家有所帮助。

涉及到的内容:

1.chrome浏览器
2.js代码
3.函数节流

第一步

打开chrome浏览器,使用组合键Ctrl+shift+i打开开发者工具,接下来如图所示。JS实现网页抢购功能(触发,终止脚本)

点击snippets

第二步

如图所示

JS实现网页抢购功能(触发,终止脚本)

点击new snippet -->输入脚本‘名称'-->Ctrl+s保存。

第三步

如图所示

JS实现网页抢购功能(触发,终止脚本)

选择新创建的脚本‘名称',在如图所示的第二步进行编辑js代码。最后如第三步所示:run 运行代码。

js脚本代码

1.以下是网站上的代码:

<body>
    <div class="box">
      <img class="img" src="image/pict.png" />
      <button class="btn" id='btn'>抢购</button>
    </div>
    <script type="text/javascript">
      /**
       * 抢购按钮
       * 
       * */
      btn.onclick=function(){
        console.log('抢购成功!');
      };
    </script>
  </body>

每次点击抢购 控制台输出 抢购成功!

2.脚本代码

/**
* 最简单的脚本代码
* 版本1.0.1
*/
btn.click();//触发按钮执行click事件

/**
 * 使用for循环执行抢购的脚本代码
 * 版本1.0.2
 * */
for(var i=0;i<100;i++){
  btn.click();
}

通过上边的脚本js代码可以知道,我们可以在chrome浏览器内置脚本,并控制执行。

JS实现网页抢购功能(触发,终止脚本)

当开发人员模拟真实环境的高并发情况,咱们就可以使用这种脚本的方式模拟测试。通过刚刚的脚本我们发现我们开发的页面中的js是有很多问题的。假设【抢购按钮】触发的是请求数据接口。则会出现在一个时间内发出n个请求。处理这个问题可以参考防止重复提交

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>防止ajax重复提交</title>
  </head>
  <body>
    <button id="btn">提交</button>
    <script>

      /**
       * 模拟ajax提交
       * @fn 回调函数
       * */
      function Ajax(fn){
        setTimeout(function(){
          var data= {result:true,msg:'提交成功!'};
          fn(data);
        },2000);
      }
      /**
       * btn click 提交事件
       * 
       * */
      btn.onclick=function(){
        //检查 按钮是否被锁住,锁住直接rerun
        if(btn.getAttribute('lock')){
          return;
        }
        //上锁
        btn.setAttribute('lock',1);
        //更改状态
        btn.innerText='提交中...';
        //模拟ajax提交
        Ajax(function(data){
          //请求成功
          if(data.result){
            console.log('请求成功');
            //请求成功解锁
            btn.setAttribute('lock',"");
            //还原状态
            btn.innerText='提交';
          }else{
            console.log('请求失败');
            //请求失败解锁
            btn.setAttribute('lock',"");
            //还原状态
            btn.innerText='提交';
          }
        });
      }
    </script>
  </body>
</html>

作者:java-script
链接:https://juejin.im/post/59bf6b6ff265da064261ba47
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

也可以使用函数节流方式处理。如下代码:

//网站上写的代码
/**
 * 抢购按钮
 * 
 * */
btn.onclick=function(){
   throttle(function(){
    console.log('抢购成功!');
  },500);
};
/**
 * 函数节流
 * @fn {function} 回调函数
 * @time {number} 时间,毫秒
 * 
 * */
function throttle(fn,time){
  if(throttle.id){
    clearTimeout(throttle.id);
  };
  throttle.id=setTimeout(function(){
    fn();
  },time||200);
}

通过以上方式我们可以过滤掉恶意循环触发事件。这种函数节流方式也得到大家的一致认可与推广。

总结

通过上述方式,我们不仅学会了制做简单的js脚本,也学到一种简单的阻止js脚本的方法。想要真正的写一些有用的js脚本还需要你们自己努力哦!想要正在屏蔽掉恶意的js脚本,单纯的使用前端技术其实是有很大的难度!特此献给那些正在努力学习前端并想在前端的道路上越走越远的童鞋们。祝福你们。

Javascript 相关文章推荐
背景音乐每次刷新都可以自动更换
Feb 01 Javascript
javascript 极速 隐藏/显示万行表格列只需 60毫秒
Mar 28 Javascript
风吟的小型JavaScirpt库 (FY.JS).
Mar 09 Javascript
JavaScript Eval 函数使用
Mar 23 Javascript
Javascript技巧之不要用for in语句对数组进行遍历
Oct 20 Javascript
js判断子窗体是否关闭的方法
Aug 11 Javascript
分享javascript计算时间差的示例代码
Mar 19 Javascript
jQuery简单实现彩色云标签效果示例
Aug 01 Javascript
vuejs2.0运用原生js实现简单的拖拽元素功能示例
Feb 24 Javascript
js中比较两个对象是否相同的方法示例
Sep 02 Javascript
Vue中rem与postcss-pxtorem的应用详解
Nov 20 Javascript
理解JavaScript中的对象
Aug 25 Javascript
JS基于贪心算法解决背包问题示例
Nov 27 #Javascript
基于vue.js的分页插件详解
Nov 27 #Javascript
webpack构建换肤功能的思路详解
Nov 27 #Javascript
vue实现商城上货组件简易版
Nov 27 #Javascript
修改UA在PC中访问只能在微信中打开的链接方法
Nov 27 #Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
Nov 27 #Javascript
vue实现商城购物车功能
Nov 27 #Javascript
You might like
通过table标签,PHP输出EXCEL的实现方法
2013/07/24 PHP
Zend Framework动作助手FlashMessenger用法详解
2016/03/05 PHP
PHP封装的PDO数据库操作类实例
2017/06/21 PHP
jQuery 连续列表实现代码
2009/12/21 Javascript
Javascript 面向对象编程(coolshell)
2012/03/18 Javascript
JQueryEasyUI datagrid框架的进阶使用
2013/04/08 Javascript
JavaScript中 ES6 generator数据类型详解
2016/08/11 Javascript
js实现添加可信站点、修改activex安全设置,禁用弹出窗口阻止程序
2016/08/17 Javascript
React 子组件向父组件传值的方法
2017/07/24 Javascript
JS获取input[file]的值并显示在页面的实现方法
2018/03/09 Javascript
jQuery实现的手动拖动控制进度条效果示例【测试可用】
2018/04/18 jQuery
深入浅析Vue.js计算属性和侦听器
2018/05/05 Javascript
react 中父组件与子组件双向绑定问题
2019/05/20 Javascript
[01:05:36]VP vs TNC Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
[57:24]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[02:55]2018DOTA2国际邀请赛勇士令状不朽珍藏Ⅲ饰品一览
2018/08/01 DOTA
提升Python程序运行效率的6个方法
2015/03/31 Python
Python实现读写INI配置文件的方法示例
2018/06/09 Python
centos6.5安装python3.7.1之后无法使用pip的解决方案
2019/02/14 Python
python字典一键多值实例代码分享
2019/06/14 Python
浅谈python中统计计数的几种方法和Counter详解
2019/11/07 Python
python将数组n等分的实例
2019/12/02 Python
win10系统下python3安装及pip换源和使用教程
2020/01/06 Python
全球性的在线婚纱礼服工厂:27dress.com
2019/03/21 全球购物
简述进程的启动、终止的方式以及如何进行进程的查看
2014/02/20 面试题
最新大学生自我评价
2013/09/24 职场文书
翻译专业应届生求职信
2013/11/23 职场文书
收款委托书范本
2014/09/11 职场文书
教师查摆问题自查报告
2014/10/11 职场文书
项目验收申请报告
2015/05/15 职场文书
学生会主席任命书
2015/09/21 职场文书
react国际化react-intl的使用
2021/05/06 Javascript
Vue和Flask通信的实现
2021/05/19 Vue.js
Pytorch数据读取之Dataset和DataLoader知识总结
2021/05/23 Python
Apache Pulsar结合Hudi构建Lakehouse方案分析
2022/03/31 Servers
Python获取字典中某个key的value
2022/04/13 Python