一、介绍
主要使用带带弟弟 通用验证码识别OCR pypi版开源库
ddddocr是由sml2h3开发的专为验证码厂商进行对自家新版本验证码难易强度进行验证的一个python库,其由作者与kerlomz共同合作完成,通过大批量生成随机数据后进行深度网络训练,本身并非针对任何一家验证码厂商而制作,本库使用效果完全靠玄学,可能可以识别,可能不能识别。
ddddocr奉行着开箱即用、最简依赖的理念,尽量减少用户的配置和使用成本,希望给每一位测试者带来舒适的体验
二、程序主体
1.格式转换
def base64_to_byte(base64_str):
base64_data = re.sub('^data:image/.+;base64,', '', base64_str)
byte_data = base64.b64decode(base64_data)
return byte_data
2.获取坐标
def get_target(target_str, background_str):
target_bytes= base64_to_byte(target_str)
background_bytes= base64_to_byte(background_str)
det = ddddocr.DdddOcr(det=False, ocr=False)
res = det.slide_match(target_bytes, background_bytes, simple_target=True)
return res
3.模拟滑动
def get_track(distance): # distance为传入的总距离
# 移动轨迹
track=[]
# 当前位移
current=0
# 减速阈值
mid=distance*4/5
# 计算间隔
t=0.2
# 初速度
v=20
while current<distance:
if current<mid:
# 加速度为2
a=4
else:
# 加速度为-2
a=-3
v0=v
# 当前速度
v=v0+a*t
# 移动距离
move=v0*t+1/2*a*t*t
# 当前位移
current+=move
# 加入轨迹
track.append(round(move))
return track
3.主程序
def move_target(drive):
#获取拼图、背景、滑块
target_str=driver.find_element(By.CLASS_NAME,'image-left').get_attribute('src')
background_str=driver.find_element(By.CLASS_NAME,'advise').get_attribute('src')
move_button=driver.find_element(By.CLASS_NAME,'cpt-drop-btn')
#获取坐标
res=get_target(target_str, background_str)
distance=res['target'][0]*260/300
tracks=get_track(distance)
#开始滑动验证
ActionChains(self.driver).click_and_hold(move_button).perform()
for x in tracks:
ActionChains(self.driver).move_by_offset(xoffset=x,yoffset=0).perform()
time.sleep(0.5)
ActionChains(self.driver).release().perform()
获取的图片是300*150px的,但是网页实际是260*130px的,因此需要对距离进行一个简单换算
三、后记
如果滑动验证成功一般不会触发进一步的图标验证,ddddocr库支持图标识别
评论区