之前做项目遇到了一个滑块,滑块单独的绕过是毫无意义的,但是绕过滑块才能进行下一步登录,一种很常见的反爬措施。在此郑重声明,滑块绕过是违法的,接下来的内容只仅仅是为了用于学习,切勿用于商业用途或对使用者造成恶意伤害,本人概不负责。
这里主要有两种类型,一种是滑块,一种是图文点选。前两天刚刚学会了点图文点选,其实这两者之间应该是互通的。进入正题, 一般进入滑块页面F12先滑一下,抓包研究一下。
观察captcha-api/captcha/check这个请求,我们发现是一个post请求,不需要cookie,请求参数captchaType、pointJson、token这三个,captchaType的含义不用多讲,如果你看不懂那说明手里的代码有待多多练习,token的含义如果滑块逆向做过的话应该立马能看懂,其实就是返回get请求中的一个参数,每次不同但是必不可少。pointJson应该就是轨迹,但是感觉哪儿不对劲,就是有点短,如果你经验再多点结合这个滑块很简单应该能猜到了。
Ctrl+Shift+F全局搜索pointJson,看看这个参数会在哪里出现。
单击进入,全局搜索,挨个打断点,滑动看能不能断住,断住了说明断点OK,把另一个断点去掉,以免干扰影响。
这个滑块很简单,这里我们就找到了滑块请求的三个参数位置,接下来就很OK了,找,顺藤摸瓜的找,搞清楚this.secretKey ====》"1ojcGaGPhA9wr7ks" 是什么东西。这里怎么找我就不细说了,也没法说的清楚,毕竟这是我写给自己记录的博客,非教学博客,不过我会截图一些我找的思路,说不定对观看者有用。
综上所述,我们已经把pointJson的生成的地方已经找到了。接下来有两个选择了{
1.读懂每一行JavaScript代码,python实现
2.python调用JavaScript代码
}
然后吧。。。。。我盯着项目代码瞅了半个小时终于思路都想起来了。
接下来我的选择是用python调用JavaScript。调用代码我就复制粘贴这里。
import execjs
ctx = execjs.compile(JavaScript代码)
pointJson = ctx.call("niu_encrypt",secretKey, float(moveLeftDistance))
这里又冒出来新问题,e.secretKey是什么?
就冲var e = this;我有理由怀疑、相信这里的e是浏览器一开始进来就加载好了的。
一般这样的情况,我的做法就是
清空这里的一切然后刷新。