对于这类验证,如果我们直接模拟表单请求,繁琐的认证参数与认证流程会让你蛋碎一地,我们可以用selenium驱动浏览器来解决这个问题,大致分为以下几个步骤
- #步骤一:点击按钮,弹出没有缺口的图片
- #步骤二:获取步骤一的图片
- #步骤三:点击滑动按钮,弹出带缺口的图片
- #步骤四:获取带缺口的图片
- #步骤五:对比两张图片的所有RBG像素点,得到不一样像素点的x值,即要移动的距离
- #步骤六:模拟人的行为习惯(先匀加速拖动后匀减速拖动),把需要拖动的总距离分成一段一段小的轨迹
- #步骤七:按照轨迹拖动,完全验证
- #步骤八:完成登录
- #安装:selenium+chrome/phantomjs
- #安装:Pillow
- 3.x2.x
- http://www.cnblogs.com/apexchu/p/4231041.html
- 3.6.16.1:69c0db521201718:41:36190064
- "help""copyright""credits"or"license"for
- fromimport
- fromimport
- fromimport
- fromimport
- fromimport
- fromimport
- fromimport
- fromimport
- import
- def
- '''''
- 'snap.png'
- 'snap.png'
- return
- def
- '''''
- 'geetest_canvas_img'
- 2#保证图片刷新出来
- 'y'
- 'y']+size['height'
- 'x'
- 'x']+size['width'
- return
- def
- '''''
- 60
- 57
- forin0
- forin1
- 0]-rgb2[0
- 1]-rgb2[1
- 2]-rgb2[2
- ifnotandand
- return7#经过测试,误差为大概为7
- return7#经过测试,误差为大概为7
- def
- '''''
- #初速度
- 0
- #单位时间为0.2s来统计轨迹,轨迹即0.2内的位移
- 0.3
- #位移/轨迹列表,列表内的一个元素代表0.2s的位移
- #当前的位移
- 0
- #到达mid值开始减速
- 4/5
- while
- if
- 2
- else
- 3
- #初速度
- #0.2秒时间内的位移
- 0.5*a*(t**2
- #当前的位置
- #添加到轨迹列表
- #速度已经达到v,该速度作为下次的初速度
- return
- try
- 'https://account.geetest.com/login'
- 10
- #步骤一:先点击按钮,弹出没有缺口的图片
- 'geetest_radar_tip'
- #步骤二:拿到没有缺口的图片
- #步骤三:点击拖动按钮,弹出有缺口的图片
- 'geetest_slider_button'
- #步骤四:拿到有缺口的图片
- #步骤五:对比两张图片的所有RBG像素点,得到不一样像素点的x值,即要移动的距离
- #步骤六:模拟人的行为习惯(先匀加速拖动后匀减速拖动),把需要拖动的总距离分成一段一段小的轨迹
- #步骤七:按照轨迹拖动,完全验证
- 'geetest_slider_button'
- forin
- 0
- else
- 3,yoffset=0#先移过一点
- 3,yoffset=0#再退回来,是不是更像人了
- 0.5#0.5秒后释放鼠标
- #步骤八:完成登录
- 'email'
- 'password'
- 'login-btn'
- '18611453110@163.com'
- 'linhaifeng123'
- import
- 200
- finally
案例:
- page_snap_obj=Image
- img=driver
- location=img
- size=img
- left=location
- top=location
- right=left
- bottom=top
- page_snap_obj=get_snap
- image_obj=page_snap_obj
- start=57
- threhold=60
- rgb1=image1
- rgb2=image2
- res1=abs
- res2=abs
- res3=abs
- <threhold<threhold<threhold
- v=0
- t=0
- forward_tracks
- current=0
- mid=distance
- <distance:
- <mid:
- a=2
- a
- s=v
- v=v
- back_tracks
- driverwebdriver
- usernamedriver
- pwddriver
- signindriver
- buttondriver
- image1get_image
- buttondriver
- image2get_image
- distanceget_distance
- tracksget_tracks
- buttondriver
- xoffset=trackyoffset=0
- xoffset=back_trackyoffset=0
- xoffsetyoffset=0
- xoffset=3yoffset=0
- fromimport
- fromimport
- fromimport
- fromimport
- fromimport
- fromimport
- fromimport
- import
- def
- 'full_snap.png'
- 'full_snap.png'
- return
- def
- 'geetest_canvas_img'
- 2
- 'x'
- 'y'
- 'width'
- 'height'
- return
- def
- 57
- 60
- forin0
- forin1
- 0]-rgb2[0
- 1]-rgb2[1
- 2]-rgb2[2
- ifnotandand
- return7
- return7
- def
- 20#先滑过一点,最后再反着滑动回来
- 0
- 0.2
- 0
- 3/5
- while
- if
- 2
- else
- 3
- 0.5*a*(t**2
- #反着滑动到准确位置
- 3,-3,-2,-2,-2,-2,-2,-1,-1,-1#总共等于-20
- return'forward_tracks':forward_tracks,'back_tracks'
- def#破解滑动认证
- 'geetest_radar_tip'
- 'geetest_slider_button'
- 'geetest_slider_button'
- forin'forward_tracks'
- 0
- 0.5
- forin'back_tracks'
- 0
- 30
- 30
- 0.5
- def
- try
- 3
- 'https://passport.cnblogs.com/user/signin'
- 'input1'
- 'input2'
- 'signin'
- 10
- finally
- if'__main__'
- 'linhaifeng',password='xxxx'
面对简单的滑动验证码,极验其实是有更复杂版本的,如下所示
使用了上述验证的网站常常会在用户一片怨声载道中,又将其恢复成易于破解的滑动验证。
嘲讽验证码无效,破解简单,是很 LOW 的行为。
网站方、验证码平台方,知道你能破解,你牛 B。。。更难的验证码他们也有,只是这会严重降低体验,他们不用而已。
文章来源: 破解极验滑动验证码