ddddocr icon indicating copy to clipboard operation
ddddocr copied to clipboard

滑块匹配结果: {'target_x': 0, 'target_y': 0, 'target': [111, 0, 158, 155]}

Open 2754026865 opened this issue 10 months ago • 1 comments

为什么移动距离计算不出来?

Image

def automate_slider_verification(driver):
    def perform_slider_verification():
        # 等待滑块和背景图元素可用
        slider = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, '.verify-sub-block img'))
        )
        background = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, '.verify-img-panel img'))
        )

        # 获取滑块和背景图的Base64编码
        slider_url = slider.get_attribute("src")
        background_url = background.get_attribute("src")

        # 检查获取的URL是否为None
        if slider_url is None or background_url is None:
            print("错误:未能获取滑块或背景图的URL")
            return

        slider_url = slider_url.replace('data:image/png;base64,', '')
        background_url = background_url.replace('data:image/png;base64,', '')

        # 将Base64编码转换为图像并保存
        base64_to_image(slider_url, 'slider.png')
        base64_to_image(background_url, 'background.png')

        # 使用ddddocr进行滑块匹配
        det = ddddocr.DdddOcr(det=False, ocr=False)

        # 读取临时文件
        with open('slider.png', 'rb') as f:
            target_bytes = f.read()
        
        with open('background.png', 'rb') as f:
            background_bytes = f.read()

        # 进行滑块匹配,使用simple_target=True
        res = det.slide_match(target_bytes, background_bytes, simple_target=True)
        print("滑块匹配结果:", res)

        # 使用target计算滑块的移动距离
        if 'target' in res:
            distance = res['target'][0] + 60  # 计算滑块的目标位置,加上10以调整
            tracks = get_tracks(distance)  # 获取移动轨迹
        else:
            print("错误:返回结果中缺少目标坐标信息")
            return

        # 模拟滑动操作
        slider_button = driver.find_element(By.CSS_SELECTOR, '.verify-move-block')
        move_to_gap(driver, slider_button, tracks)  # 移动滑块

        print("滑块操作完成")

    perform_slider_verification()  # 调用内部函数

2754026865 avatar Feb 09 '25 12:02 2754026865

还用selenium呢, 换成drissionpage吧

stone00x avatar Mar 18 '25 08:03 stone00x