起因

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

排查

首先咱们打开淘宝登录页面,这里我就以阿里妈妈的超级推荐登录为例登录地址如下:登录地址
打开之后我们来到输入账户密码的地方
由于要实现自动登录的功能所以需要跟编辑框赋值,
但是淘宝是使用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

如何使用纯JS过掉淘宝滑块的更多相关文章

  1. js 实现仿 淘宝 五星评价 demo

    <style> @font-face { font-family: 'iconfont'; /* project id 247957 */ src: url('//at.alicdn.co ...

  2. pyppeteer硬钢掉淘宝登入的滑块验证

    完整代码我也不好公布,我可以给你们思路,以及部分代码动动脑子看看文档应该也能搞定 一.初始化Chromium浏览器相关属性 browser = await pyppeteer.launch({'hea ...

  3. js运动 模仿淘宝幻灯

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  4. js 关于网易淘宝移动端适配的学习

    (function (doc, win) { // orientationchange:用户水平或者垂直翻转设备(即方向发生变化)时触发的事件;(屏幕大小发生变化) var docEl = doc.d ...

  5. 原生js仿淘宝手机购买选项代码

    这是一款基于原生js实现仿淘宝手机信息购买选项效果源码,界面整体效果仿照淘宝购物选项设计,点击不同选项还可实时显示不同的价格计算结果,界面简洁大方.美观实用.可兼容目前最新的各类主流浏览器. 在线演示 ...

  6. JavaScript(Node.js)+ Selenium 实现淘宝抢单

    JavaScript(Node.js)+ Selenium 淘宝抢单 为了买买买我也是拼了,看了一点selenium的资料,随便写的. 程序写的比较烂,但是够我自己用了,望各路大牛指教. 使用说明: ...

  7. 使用Python爬取淘宝两千款套套

    各位同学们,好久没写原创技术文章了,最近有些忙,所以进度很慢,给大家道个歉. 警告:本教程仅用作学习交流,请勿用作商业盈利,违者后果自负!如本文有侵犯任何组织集团公司的隐私或利益,请告知联系猪哥删除! ...

  8. 百度,淘宝,腾讯三大巨头HTML页面规范分解

    [兼容html5方案] 百度贴吧,百度图片的实现 <!--[if lt IE 9]> <script> (function(){ var tags = ['header','f ...

  9. 安卓sdk webview获取淘宝个人信息100项,源码。

    1.贴出主要代码.这个不是python,python只涉及了服务端对信息提取结果的接受.主体是java  + android + js.由于淘宝各模块都是二级子域名,不能只在一个页面完成所有请求,aj ...

  10. 百度、淘宝、腾讯三大巨头HTML页面有何高招?

    众所周知用html5新增标签布局不光可以使页面更具有可读性,也能使代码更清晰规范,但是兼容性成为了首要的问题,如何解决也是问题的关键. [兼容HTML5方案] 百度贴吧,百度图片的实现: <!- ...

随机推荐

  1. 【kubernetes入门到精通】Kubernetes的健康监测机制以及常见ExitCode问题分析「探索篇」

    kubernetes进行Killed我们服务的问题背景 无论是在微服务体系还是云原生体系的开发迭代过程中,通常都会以Kubernetes进行容器化部署,但是这也往往带来了很多意外的场景和情况.例如,虽 ...

  2. [编程基础] Python配置文件读取库ConfigParser总结

    Python ConfigParser教程显示了如何使用ConfigParser在Python中使用配置文件. 文章目录 1 介绍 1.1 Python ConfigParser读取文件 1.2 Py ...

  3. java RSA加密

    参考了下面这个博主的文章,很有收获,简单处理后记录一下 RSA加密.解密.签名.验签的原理及方法 - PC君 - 博客园 工具类自带生成秘钥的方法,也可以用第三方工具生成秘钥 package com. ...

  4. [C++]union联合体总结

    特点一:成员公用内存,且按所占内存最大的数据成员分配内存 //举例1 union A{ char a;//1个字节 int b;//4个字节 char c;//1个字节 } cout<<s ...

  5. 疯狂吐槽 MAUI 以及 MAUI 入坑知识点

    目录 窗口 窗口管理 如何限制一次只能打开一个程序 MAUI 程序安装模式 为 MAUI Blazor 设置语言 坑 ① 坑 ② 坑 ③ 配置 MAUI 项目使用管理员权限启动 问题背景 定制编译过程 ...

  6. Hugging Face 每周速递:Spaces 上边可以跑 Jupyter Notebook;百度 UIE-X 模型展示发布...

    每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...

  7. C-04\IDE基础知识和分支,循环语句

    一.浮点数特性及比较方法 浮点数在多参数传参的时候默认是会进行精度转换,由float转换到double,浮点数是一个近视值,不能进行直接等于比较,一般可以用区间法比较但是会存在精度丢失的问题. 浮点数 ...

  8. 线程基础知识-CountDownLatch

    转:https://blog.csdn.net/hbtj_1216/article/details/109655995 1 概念1.1 简介 CountDownLatch是一个同步工具类,它允许一个或 ...

  9. HTML5 + canvas 汽车赛道,飙车游戏(附源码)

    好玩的游戏千千万 有趣的万里挑一 最近逛 gitHub 时 发现的一个好玩的赛车游戏 ,试玩之后感觉还是挺不错的 在这分享给那些喜欢玩赛车的车友们 效果图如下 源码分析 TweenMax.min.js ...

  10. P32_全局配置 - tabBar

    什么是 tabBar tabBar 是移动端应用常见的页面效果,用于实现多页面的快速切换.小程序中通常将其分为: 底部 tabBar 顶部 tabBar 注意:tabBar中只能配置最少 2 个.最多 ...