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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。