起因

众所周知淘宝滑块很难过掉,今天博主就专门研究了一下淘宝滑块,
之前博主也有研究过但是发现并不好过。
今天恰好有个项目需要淘宝登录,就有滑块验证,
说明一下博主做的是浏览器插件哦。今天博主打算在研究滑块。
记录一下博主的解密过程。

排查

首先咱们打开淘宝登录页面,这里我就以阿里妈妈的超级推荐登录为例登录地址如下:登录地址
打开之后我们来到输入账户密码的地方
由于要实现自动登录的功能所以需要跟编辑框赋值,
但是淘宝是使用react写的所以一般情况下是无法外部赋值的
在React和Vue如何使用原生JS赋值中我已经讲过如何赋值了,这里就不在多讲。
好了我们输入一个a在用户名的地方

可以看见滑块已经出来了

分析

咱们f12打开开发者工具,选中滑块拖动的span查看一下绑定事件

可以看到只绑定了一个鼠标按下事件,按照正常思路不是应该还有鼠标拖动事件吗?
别急咱们进入代码看一下

来到代码可以看到是进入了i这个方法中,咱们往下找找,下面我把i方法贴出来

function i(i) {function a() {s.btn.onmousedown = null,s.txt.onmousedown = null,e.removeEvt(l, "mousemove", r),e.removeEvt(l, "mouseup", f),e.removeEvt(l, "touchmove", h),e.removeEvt(l, "touchend", g),e.removeEvt(s.btn, "touchstart", o),e.removeEvt(s.txt, "touchstart", o);var i = {};i.btn = s.btn,i.bar = s.bar.childNodes[1],n(d.actionend),n(d.slide_end),t.onScaleReady(i)}function r(e) {m || (n(d.actionstart),n(d.slide_start),m = !0);var t = (e || p.event).clientX, i = _.min(y, _.max(-2, k + (t - v)));s.btn.style.left = i + "px",s.ondrag(_.round(100 * _.max(0, i / y)), i);var o = x + s.bar.offsetWidth;if (t >= o && (i < y || t - k < y))return void f.call(this);var r = c.getClientRect(s.btn).left;i != y && t - r - b != y || a()}function f() {var t = parseInt(s.btn.style.left);t < y && (c.addClass(s.btn, "button_move"),c.addClass(e.id(u + "_bg"), "bg_move"),s.btn.style.left = "0px",s.ondrag(0, 0),setTimeout(function() {c.removeClass(s.btn, "button_move"),c.removeClass(e.id(u + "_bg"), "bg_move")}, 500)),e.removeEvt(this, "touchmove", h),e.removeEvt(l, "touchmove", h),e.removeEvt(l, "mousemove", r),e.removeEvt(l, "mouseup", f)}function g(e) {f.call(this, e.touches[0])}function h(e) {e.preventDefault(),r.call(this, e.touches[0])}var m = !1, v = (i || p.event).clientX, b = s.btn.offsetWidth, y = s.bar.offsetWidth - b, k = s.btn.offsetLeft, x = c.getClientRect(s.bar).left;e.addHandler(l, "mousemove", r),e.addHandler(l, "mouseup", f),e.addHandler(l, "touchmove", h),e.addHandler(l, "touchend", g)
}

仔细分析一下上面的代码可以发现在咱们鼠标按下的时候绑定mousemove事件也就是鼠标移动事件,
根据以上代码来到r方法,仔细分析一下r方法的代码。
可以发现这段代码

var t = (e || p.event).clientX

获取了e对象的clientX来进行对比,那么和谁对比呢?下面这句代码是关键

i = _.min(y, _.max(-2, k + (t - v)));

可以看到t-v是取出了差来进行对比的,那么t可以在方法中看到但是v变量呢?
仔细看一下绑定事件之前的代码可以发现,v是咱们按下时的坐标

 v = (i || p.event).clientX

通过上面的分析可以得到的是,鼠标按下获取了鼠标按下的坐标并绑定了事件。
咱们拖动的时候一直在计算鼠标的差,到这里懂的人应该都可以分析出来了。
没错,就是取差来判断是否拖动到了指定的长度
咱们继续分析,可以看到r方法最后一句

i != y && t - r - b != y || a()

i!=y就不管他,那么i==y就进入a方法,咱们来看一下y变量在哪里

var m = !1, v = (i || p.event).clientX, b = s.btn.offsetWidth, y = s.bar.offsetWidth - b, k = s.btn.offsetLeft, x = c.getClientRect(s.bar).left;

可以看到y其实就是取的容器的长度减去b的长度,而b就是滑块的长度。
由此已经可以看出来了最关键的过程。

处理

好了上面已经分析出过程了,所以咱们接下来写代码过掉滑块
第一步,触发滑块id为nc_1_n1zmousedown事件,这里直接触发

event = document.createEvent('MouseEvents');
event.initEvent('mousedown', true, false);
document.querySelector("#nc_1_n1z").dispatchEvent(event);

在触发这个事件之后nc_1_n1z就绑定了mousemove事件,这里咱们先不触发,可以把鼠标移上去
在把鼠标移入网页的一瞬间可以看到滑块已经过掉了。看懂上面分析过程的孩纸应该都知道这是为什么

好了下面咱们在触发一下mousemove事件

event = document.createEvent('MouseEvents');
event.initEvent('mousemove', true, false);
Object.defineProperty(event,'clientX',{get(){return 260;}})
document.querySelector("#nc_1_n1z").dispatchEvent(event);

通过上面的执行可以看到滑块一下子就过掉了。好了,咱们把代码合并一下

event = document.createEvent('MouseEvents');
event.initEvent('mousedown', true, false);
document.querySelector("#nc_1_n1z").dispatchEvent(event);
event = document.createEvent('MouseEvents');
event.initEvent('mousemove', true, false);
Object.defineProperty(event,'clientX',{get(){return 260;}})
document.querySelector("#nc_1_n1z").dispatchEvent(event);

下面看一下效果

原文地址:http://blog.1zyan.cn/956.html

转载于:https://www.cnblogs.com/yizhiyan/p/11286028.html

如何使用纯JS过掉淘宝滑块相关推荐

  1. 【Auto.js脚本】淘宝618集喵币列车活动 自动浏览任务

    [Auto.js脚本]淘宝618集喵币列车活动 自动浏览任务 附上使用方法: 1.打开Auto.js(该软件的相关用法就不细说了,无障碍,悬浮窗权限这些),右下角导入脚本 2.打开淘宝,进入活动页面, ...

  2. 3.用js实现关闭淘宝二维码

    用js实现关闭淘宝二维码 css代码如下: <style> *{ margin:0 ; padding: 0; } .box{ border: 1px solid black; margi ...

  3. 案例:js实现关闭淘宝二维码

    案例:js实现关闭淘宝二维码 先看效果演示: js实现过程: 第1步.获取页面元素 var x = document.getElementById('x');//id比较好用,因为id具有唯一性// ...

  4. js实现天猫淘宝购物放大镜效果

    前言 分享一个笔者写过的js实现天猫淘宝购物放大镜效果的例子 正文 代码如下: <!DOCTYPE html> <html><head><meta chars ...

  5. python 淘宝滑块验证_python2.7+selenium2实现淘宝滑块自动认证功能

    本文为大家分享了python2.7+selenium2实现淘宝滑块自动认证的具体代码,供大家参考,具体内容如下 1.编译环境 操作系统:win7:语言:python2.7+selenium2:ide: ...

  6. 淘宝滑块 tb滑块 x82y x5sec

    py 易 js补环境的 成功率百分百 支持并发 源码 dll 都有 淘宝滑块 tb滑块 x82y x5sec

  7. 原生JS写仿淘宝搜索框(代码+效果),可实现3级搜索哦!

    闲来无事,用原生JS写了一个淘宝搜索框,用的淘宝的接口,可直接进行商品搜索. 写在前面: 1.记得引用jquery啊! 2.有人私信我说css样式不能用,那是因为复制代码的时候,有空格,只需要自己把c ...

  8. selenium 反爬虫之跳过淘宝滑块验证!首先要搞定JS!

    在处理问题的之前,给大家个第一个锦囊! 你需要将chorme更新到最新版版本84,下载对应的chorme驱动 驱动地址 注意 划重点!!一定要做这一步,因为我用的83的chorme他是不行滴,~~~~ ...

  9. python 淘宝滑块验证_selenium 反爬虫之跳过淘宝滑块验证!首先要搞定JS!

    在处理问题的之前,给大家个第一个锦囊! 你需要将chorme更新到最新版版本84,下载对应的chorme驱动 注意 划重点!!一定要做这一步,因为我用的83的chorme他是不行滴,~~~~~~~ 问 ...

最新文章

  1. iOS中关于NSTimer使用知多少
  2. 使用Fork/Join框架优化归并排序
  3. 海量服务 | 论服务器极致化海量运营交付的未来
  4. 关于Java泛型和擦除
  5. python卸载opencv包_Ubuntu16.04卸载opencv2.4.9并安装opencv3.2.0+contrib
  6. 通过Flume简单实现Kafka与Hive对接(Json格式)
  7. 《大数据》第1期“专题”——大数据机器学习系统研究进展(下)
  8. 网络编程和反射的基本知识点的总结
  9. Exception in thread “main“ java.util.ConcurrentModificationException
  10. php ci is numeric,CI继承类MY_Model
  11. 数学对编程思想的帮助_学编程需要什么基础?
  12. 一对一直播系统基础的交接流程
  13. Windows server服务器FTP设置以及客户端FlashFXP连接FTP
  14. PHP开发环境准备,PHPWAMP使用,图文教程
  15. Linux系统在Xshell6布置定时任务
  16. 关于局域网计算机ip地址设置,怎么设置局域网计算机的IP地址
  17. 15亿美元!软银联合GungHo收购手游巨头Supercell
  18. 兔子繁殖问题:一对兔子从出生后第三个月开始,每月生一对小兔子。小兔子到第三个月又开始生下一代小兔子。假若兔子只生不死,一月份抱来一对刚出生的小兔子,问一年中每个月各有多少对兔子(C++)(迭代法)
  19. DPU网络开发SDK—DPDK(七)
  20. 导入 txt 文件数据到 MySQL 表

热门文章

  1. Go 快速起步:创建 WebSocket 服务器(聊天室)
  2. 2021 互联网大厂“凡尔赛”年终奖大赏(不含年终奖金)
  3. 触宝AI助手“Talia”现身OPPO印度新机,TA的朋友圈实在不可想象!
  4. 使用全局鼠标键盘钩子,监控鼠标键盘事件
  5. Github上的扫描器,方便查看使用
  6. date_format的使用:将“秒”转换为yyyy-mm-dd
  7. 乐视贾跃亭:FF工厂不会缩水,力保FF 91按时交付
  8. 基于QT的运动参数提取与轨迹重现
  9. 2017面向对象程序设计(Java)第十五周学习总结
  10. 【Cmake实战:番外】库、动态库和静态库(.dll,.so,.lib,.a)