selenium+Chrome滑动验证码破解二(某某网站)
具体详情见代码,研究网站,随便输入手机号点击获取验证码
在自己写代码前参考了一批博客,是把所有验证码图片截取所有验证码图片保存在本地,再对比,感觉方法不行,所以自己写了个破解方法,通过js修改css直接抓取完整图片,因为上一篇写了B站,这里就不一一分析了,直接上代码:
破解成功界面
完整代码:
#-*-coding:utf-8-*- ''' 研究网站:https://account.ch.com/NonRegistrations-Regist 滑块验证码也分两种: 1.直接给缺口图片,先滑动到缺口找到完整验证码图片,对比有缺口的验证码图片,然后计算缺口坐标,再利用selenium移动按钮到指定位置 2.直接给原图,缺口需要点击出现,直接保存原图,然后对比 ''' fromseleniumimportwebdriver fromselenium.webdriver.support.waitimportWebDriverWait fromselenium.webdriver.supportimportexpected_conditionsasEC fromselenium.webdriver.common.byimportBy fromselenium.webdriverimportActionChains fromlxml.htmlimportetree fromPILimportImage fromtimeimportsleep importre,requests fromurllib.requestimporturlretrieve frombs4importBeautifulSoup classSliderVerificationCode(object): def__init__(self):#初始化一些信息 self.left=60#定义一个左边的起点缺口一般离图片左侧有一定的距离有一个滑块 self.url='https://account.ch.com/NonRegistrations-Regist' self.chromedriverPath="C:\ProgramFiles(x86)\Google\Chrome\Application\chromedriver.exe" self.driver=webdriver.Chrome(executable_path=self.chromedriverPath) self.wait=WebDriverWait(self.driver,20)#设置等待时间20秒 self.phone="18516544488" definput_name_password(self):#输入手机号 self.driver.get(self.url) self.driver.maximize_window() self.inputphone=self.wait.until(EC.presence_of_element_located((By.NAME,'phoneNumberInput'))) self.inputphone.send_keys(self.phone) defclick_login_button(self):#点击登录按钮,出现验证码图片 login_button=self.wait.until(EC.element_to_be_clickable((By.ID,'getDynamicPwd'))) login_button.click() sleep(1) defget_geetest_image(self):#获取验证码图片 #print(self.driver.page_source) gapimg=self.wait.until(EC.presence_of_element_located((By.CLASS_NAME,'geetest_canvas_bg'))) sleep(2) gapimg.screenshot(r'./captcha1.png') #通过js代码修改标签样式显示图片2 js='varchange=document.getElementsByClassName("geetest_canvas_fullbg");change[0].style="display:block;"' self.driver.execute_script(js) sleep(2) fullimg=self.wait.until( EC.presence_of_element_located((By.CLASS_NAME,'geetest_canvas_fullbg'))) fullimg.screenshot(r'./captcha2.png') defis_similar(self,image1,image2,x,y): '''判断两张图片各个位置的像素是否相同 #image1:带缺口的图片 :paramimage2:不带缺口的图片 :paramx:位置x :paramy:位置y :return:(x,y)位置的像素是否相同 ''' #获取两张图片指定位置的像素点 pixel1=image1.load()[x,y] pixel2=image2.load()[x,y] #设置一个阈值允许有误差 threshold=60 #彩色图每个位置的像素点有三个通道 ifabs(pixel1[0]-pixel2[0])以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。