基于yolov5滑块识别破解(二)

        通过上一篇文章基于yolov5滑块识别破解(一)-CSDN博客,我们已经完成了yolov5的部署和训练,接下来我们将对源码进行改动,来实现滑块的自动滑动破解。

1.获取坐标

        修改detect中for循环的内容,获取目标的左上角的x位置,可以理解为阴影快的位置。之后的代码都可以删除掉了。

        修改末尾函数,返回x_location

2.浏览器登陆

        这里以豆瓣登陆为例,使用DrissionPage操作浏览器,自动输入账号密码来到登陆界面的滑块确认操作:

代码如下:

page = ChromiumPage()

# 跳转到登录页面
page.get('https://accounts.douban.com/passport/login')

# 点击账号密码登陆
page.ele('xpath://*[@id="account"]/div[2]/div[2]/div/div[1]/ul[1]/li[2]').click()

# 输入账号和密码
page.ele('xpath://*[@id="username"]').input('17263498234')
page.ele('xpath://*[@id="password"]').input('17263498234')

# 点击登陆
page.ele('xpath://*[@id="account"]/div[2]/div[2]/div/div[2]/div[1]/div[4]/a').click()

3.滑块图片获取

        DrissionPage自带了页面截图的效果,我们只需要截取滑块部分即可。坐标获取的办法有很多种,我用的是直接截取整个网页图片,然后在windows画板中去查看坐标。(由于显示器大小的原因,不同的电脑可能滑块页面的像素位置会不同,建议自己截图测量一下)

代码如下:

    page.get_screenshot(left_top=(754,294),right_bottom=(1114,664),name='blok.jpg')

        left_top=(754,294):滑块部分左上角在整个页面的坐标

        right_bottom=(1114,664):滑块部分右下角在整个页面的坐标 

运行结果如下:

4.阴影快水平位置获取

        再得到图片以后我们就可以调用yolov5去检测阴影快,得到距离目标的水平距离。

5.获取滑块元素

        因为滑块元素是在原来的html页面里面又嵌套了一个html结构,直接获取滑块元素是获取不到的,我们需要切换到对应的iframe下,代码如下:

# 切换iframe
iframe = page.get_frame('tcaptcha_iframe_dy')

# 获取iframe中的滑块元素
iframe.ele('xpath://*[@id="tcOperation"]/div[6]')

6.滑动滑块

        在拿到距离目标的水平位置之后,我们可以滑动滑块去解锁了。由于yolov5返回的目标位置是从图片最左边开始算的,而且滑块的起始位置并不在最左边,所以我们还要减掉滑块的起始位置。

 完整代码

import shutil
import time
import os
from detect import get_location
from DrissionPage import ChromiumPage

# 用 d 模式创建页面对象(默认模式)
page = ChromiumPage()

def delete_folder(folder_path):
    if os.path.exists(folder_path):
        shutil.rmtree(folder_path)  # 删除文件夹及其内容
        print(f"文件夹 '{folder_path}' 已删除")
    else:
        print(f"文件夹 '{folder_path}' 不存在")

def delete_files_in_directory(directory):
    # 遍历目录中的所有文件
    for filename in os.listdir(directory):
        file_path = os.path.join(directory, filename)
        try:
            # 检查是否是文件,避免删除子文件夹
            if os.path.isfile(file_path):
                os.remove(file_path)
                print(f'已删除文件: {file_path}')
        except Exception as e:
            print(f'删除文件时出错: {file_path}, 错误: {e}')


def action(target):
    # 切换iframe
    iframe = page.get_frame('tcaptcha_iframe_dy')
    print('开始滑动')
    iframe.ele('xpath://*[@id="tcOperation"]/div[6]').drag(target,0,1)
    print('滑动结束')


def login_page():
    # 跳转到登录页面
    page.get('https://accounts.douban.com/passport/login')

    # 点击账号密码登陆
    page.ele('xpath://*[@id="account"]/div[2]/div[2]/div/div[1]/ul[1]/li[2]').click()

    # 输入账号和密码
    page.ele('xpath://*[@id="username"]').input('17263498234')
    page.ele('xpath://*[@id="password"]').input('17263498234')

    # 点击登陆
    page.ele('xpath://*[@id="account"]/div[2]/div[2]/div/div[2]/div[1]/div[4]/a').click()

    # 等待让滑块加载出来
    time.sleep(2)

    # 删除之前的图片
    delete_files_in_directory('./data/images')
    delete_folder('./runs/detect/')

    # 对整页截图并保存
    page.get_screenshot(left_top=(754,294),right_bottom=(1114,664),name='blok.jpg',path='./data/images')

    # 获取当前位置
    location = get_location()

    # 滑动滑块,位置为目标距离减去滑块起始距离
    action(location-40)


if __name__ == '__main__':
    login_page()


结果展示

YOLOv5(You Only Look Once Version 5)是一种流行的实时目标检测算法,用于识别图像中的物体并定位其边界框。如果你想用预训练的YOLOv5滑块验证码识别模型来确定验证码的位置,你需要经历以下几个步骤: 1. **下载模型**: 首先,确保你已经从GitHub或其他官方资源获取了经过训练的ONNX(Open Neural Network Exchange)格式的模型。YOLOv5通常会提供转换后的ONNX模型供下游任务使用。 2. **安装依赖**: - 安装必要的库,如`onnxruntime`, `numpy`, 和 `PIL` (Python Imaging Library) 等,用于加载和处理ONNX模型以及图像操作。 3. **加载模型**: 使用`onnxruntime.InferenceSession`加载模型,这将创建一个可以执行推理的会话。 ```python import onnxruntime as ort ort_session = ort.InferenceSession("path_to_yolov5_onnx_model.onnx") ``` 4. **预处理输入**: 对验证码图片进行适当大小调整、归一化等预处理,使其符合模型期望的输入格式。 5. **执行预测**: 通过会话的`run`函数,传入预处理后的图像数据,得到模型预测的结果,包括每个滑块候选区域的位置信息(例如,边界框坐标、置信度等)。 ```python input_name = ort_session.get_inputs()[0].name outputs = ort_session.run(None, {input_name: image_data}) # image_data should be in the correct format bounding_boxes = outputs[0] # Bounding boxes for each detected slide ``` 6. **解析结果**: 分析模型返回的边界框数据,从中筛选出最有可能是验证码的滑块区域。 7. **后处理**: 可能需要应用非极大值抑制(Non-Maximum Suppression, NMS)来减少重叠的边界框,并最终确定滑块的精确位置。 8. **应用到验证码验证系统**: 将滑块的位置信息传递给验证码验证部分,完成滑块的匹配和验证流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值