侧边栏壁纸
  • 累计撰写 66 篇文章
  • 累计创建 47 个标签
  • 累计收到 111 条评论

目 录CONTENT

文章目录

Python使用ddddocr库解决携程验证码

草莓牛奶
2022-08-29 / 0 评论 / 0 点赞 / 953 阅读 / 582 字 / 正在检测是否收录...
温馨提示:
「博客文章out of date 会及时更新,无特殊说明仍然有效,欢迎指正内容中的错误」

一、介绍

主要使用带带弟弟 通用验证码识别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的,因此需要对距离进行一个简单换算

image-20220830004013511

三、后记

如果滑动验证成功一般不会触发进一步的图标验证,ddddocr库支持图标识别

image-20220830004104998

0

评论区