本文所有教程、源码及软件,仅供技术研究使用。不涉及对计算机信息系统功能的删除、修改、增加、干扰,也不影响计算机信息系统的正常运行。请勿将代码用于侵权、删除等非法用途!多槽口滑块验证演示环境win10Python3.9分享一个项目中遇到的多槽口滑块验证,先触发滑块抓包,分析用的是哪个。经过分析,发现是不是使用了top图片。素梅,验证图片的接口地址是他自己的接口,应该是自己写的验证,有经验的大佬会指出来。滑块图像的地址被捕获,它被加密,并且通过画布绘制到页面永远找不到真正的url。用最笨的方法直接截图页面defget_v3(self):#Openanewwindow执行jsOpenanewwindow(神奇效果,检测不到)js='window.open("https://www.vivo.com.cn/service/mobilePhoneAuthenticityCheck/query");'self.driver.execute_script(JS)#切换self.driver.switch_to.window(self.driver.window_handles[1])imei=“862056063123458”#By.XPATH,'//[@id="phone_IMEI"]')))phone_IMEI.send_keys(IMEI)#选中复选框self.wait.until(EC.presence_of_element_located((By.XPATH,'/html/body/main/div[2]/div/p/span')).click()#点击立即查询self.wait.until(EC.presence_of_element_located((By.XPATH,'//[@id="query_IMEI"]')))。click()#定位滑块图片#必须先遍历页面所有元素,否则找不到新的弹出滑块元素self.web_driver_wait_ruishu(10,"class",'dx_captchadx_captcha_loading-style-popupdx_captcha_basicdx_captcha-type-basicdx_captcha_basic-style-popup')print("Locatetothesliderpopup")dx_captcha=self.wait.until(EC.presence_of_all_elements_located((By.XPATH,'/html/body/div/div/div[2]/div[2]/div[1]/div[2]/div[2]')))print(len(dx_captcha))iflen(dx_captcha)>1:dx_captcha=dx_captcha[-1]capelse:ptptpt=dx_cap[0]#截屏dx_captcha.screenshot(self.bgImg_path)剩下的就是识别间隙距离,生成运动轨迹@staticmethoddefclear_white(img):"""清除图片空白区域,这里主要清除滑块的空白"""IMG=CV2.imream(IMG)ROWS,COLS,Channel=Img.Shapemin_x=255min_y=255max_x=0max_y=0forxinright(1,ROWS):foryinrange(1,colors):T=set(img[x,y])iflen(t)>=2:IFx<=min_x:min_x=xelifx>=max_x:max_x=xify<=min_y:min_y=yelify>=max_y:max_y=yimg1=img[min_x:max_x,min_y:max_y:max_y]返回img1@staticmethoddefdeftemplate_match(tpl,targe):th,th,tw=tpl.shape[:2]结果=shape=shape=shape=cv2.matchTemplate(target,tpl,cv2.TM_CCOEFF_NORMED)min_val,max_val,min_loc,max_loc=cv2.minMaxLoc(result)tl=max_locbr=(tl[0]+tw,tl[1]+th)ctangle(cv2.rectangle(cv2.rectangle)target,tl,br,(0,0,255),2)returntl[0],tl[1]defcalculate_distance(self,pic1_path,pic2_path):"""计算滑块到缺口的距离"""img1=self.clear_white(pic1_path)img1=cv2.cvtColor(img1,cv2.COLOR_RGB2GRAY)slide=cv2.Canny(img1,100,200)img2=cv2.imread(pic2_path,0)cv2.,100,200)slide_pic=cv2.cvtColor(slide,cv2.COLOR_GRAY2RGB)back_pic=cv2.cvtColor(back,cv2.COLOR_GRAY2RGB)#滑块在图片上的位置x,y=self.template_match(slide_pic,back_pic)#滑块到缺口的距离dis_x=int((x+5)(340/552))dis_y=int(y(340/552))returndis_x,dis_xdefget_tracks(self,distance,_y):"""获取轨迹参数"""tracks=list()y,v,t,current=0,0,1,0mid=distance3/4=exceed。3a/=2v0=vs=v0t+0.5a(tt)电流+=int(s)v=v0+aty+=random.randint(-3,3)z=z+z+randy.randint(5,10)tracks.append([min(current,(distance+exceed)),y,z])whileexceed>0:exceed-=random.randint(0,5)y+=random.randint(-3,3)z=z+random.randint(5,9)tracks.append([min(current,(distance+exceed)),y,z])tr=[]对于i,xinenumerate(tracks):tr.append({'x':x[0],'y':_y,'relative_time':x[2]urneffecttr})communicationonly被侵删!
