使用操纵破解极验的滑动验证码

  

  

1。打开前端网,点击登录。

  

2。填写账号:密码。

  

3。点解验证按钮,通过滑动验证,最后成功登陆。

  

  

github上可以检验。

  

具体代码如下所示:

  

run.js         const操纵木偶的人=要求(“操纵”);   const设备=要求(“操纵/DeviceDescriptors”);   const iPhone=设备(“iPhone 6 +”);   让超时=函数(延迟){   返回新的承诺((解决,拒绝)=比;{   setTimeout(()=比;{   尝试{   解决(1)   }捕捉(e) {   反对(0)   }   },延迟);   })   }   让页面=零   让btn_position=零   让时间=0//执行重新滑动的次数   const distanceError=[-10年2、3、5]//距离误差   异步函数运行(){   const浏览器=等待puppeteer.launch ({   无头:假//这里我设置成假的主要是为了让大家看到效果,设置为真实就不会打开浏览器   });   页面=等待browser.newPage ();//1 .打开前端网   等待page.emulate (iPhone);   等待page.goto (“https://www.qdfuns.com/?;   等待超时(1000);//2 .打开登录页面   page.click(“[数据类型=登录]”)   等待超时(1000);//3 .输入账号密码   page.type(“输入(数据类型=电子邮件)”,“你的账号”)   等待超时(500);   page.type(“输入[占位符=密码)”,“你的密码”)   等待超时(1000);//4 .点击验证   page.click (“.geetest_radar_tip”)   等待超时(1000);   btn_position=等待getBtnPosition ();//5 .滑动   拖(空)   }/* *   *计算按钮需要滑动的距离   * */异步函数calculateDistance () {   const距离=等待page.evaluate(()=比;{//比较像素,找到缺口的大概位置   函数比较(文档){   const ctx1=document.querySelector (“.geetest_canvas_fullbg”);//完成图片   const ctx2=document.querySelector (“.geetest_canvas_bg”);//带缺口图片   const pixelDifference=30;//像素差   让res=[];//保存像素差较大的x坐标//对比像素   (让我=57;i<260;我+ +){   (让j=1; j<160; j + +) {   const imgData1=ctx1.getContext (2 d) .getImageData (1 * 1 * j, 1, 1)   const imgData2=ctx2.getContext (2 d) .getImageData (1 * 1 * j, 1, 1)   const data1=imgData1.data;   const data2=imgData2.data;   const res1=Math.abs (data1 [0] data2 [0]);   const它=Math.abs (data1 [1] data2 [1]);   const res3=Math.abs (data1 [2] data2 [2]);   如果(!(res1 & lt;pixelDifference,,它& lt;pixelDifference,,res3 & lt;pixelDifference)) {   如果(! res.includes (i)) {   res.push(我);   }   }   }   }//返回像素差最大值跟最小值,经过调试最小值往左小7像素,最大值往左54像素   返回{分钟:res[0] 7,马克斯:[res.length-1] -54}   }   返回比较(文档)   })   返回的距离;   }/* *   *计算滑块位置   */异步函数getBtnPosition () {   const btn_position=等待page.evaluate(()=比;{   const {clientWidth, clientHeight}=document.querySelector (“.geetest_popup_ghost”)   返回{btn_left: clientWidth/2 - 104, btn_top: clientHeight/2 + 59}   })   返回btn_position;   }/* *   *尝试滑动按钮   * @param距离滑动距离   * */异步函数tryValidation(距离){//将距离拆分成两段,模拟正常人的行为   const distance1=距离- 10   const distance2=10   page.mouse.click (btn_position.btn_left btn_position.btn_top,{延迟:2000})   page.mouse.down (btn_position.btn_left btn_position.btn_top)   page.mouse.move (btn_position.btn_left + distance1 btn_position.btn_top,{步骤:30})   等待超时(800);   page.mouse.move (btn_position.btn_left + distance1 + distance2 btn_position.btn_top,{步骤:20})   等待超时(800);   page.mouse.up ()   等待超时(4000);//判断是否验证成功   const isSuccess=等待page.evaluate(()=比;{   返回document.querySelector (.geetest_success_radar_tip_content),,document.querySelector .innerHTML (“.geetest_success_radar_tip_content”)   })   等待超时(1000);//判断是否需要重新计算距离   const reDistance=等待page.evaluate(()=比;{   返回document.querySelector (.geetest_result_content),,document.querySelector .innerHTML (“.geetest_result_content”)   })   等待超时(1000);   返回{isSuccess: isSuccess==='验证成功”,reDistance: reDistance.includes(“怪物吃了拼图”)}   }/* *   *拖动滑块   * @param距离滑动距离   * */异步函数阻力(距离){   距离=距离| |等待calculateDistance ();   const结果=等待tryValidation (distance.min)   如果(result.isSuccess) {   等待超时(1000);//登录   console.log(“验证成功”)   页面。点击(# modal-member-login按钮)   }else if (result.reDistance) {   console.log(“重新计算滑距离录,重新滑动”)   *=0   等待拖(空)   其他}{   如果(distanceError [*]) {   * + +   console.log(“重新滑动”)   等待拖({分钟:distance.max,马克斯:distance.max + distanceError [*]})   其他}{   console.log(“滑动失败”)   *=0   run ()   }   }   }   run ()   package.json   {   “名称”:“演示”,   “版本”:“1.0.0”,   “依赖”:{   “操纵”:“^ 1.0.0”   }   }

使用操纵破解极验的滑动验证码