基于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()

结果展示

相关推荐
棒棒的皮皮12 小时前
【深度学习】YOLO模型评估之指标、可视化曲线分析
人工智能·深度学习·yolo·计算机视觉
MF_AI14 小时前
大型烟雾火灾检测识别数据集:25w+图像,2类,yolo标注
图像处理·人工智能·深度学习·yolo·计算机视觉
AI小怪兽15 小时前
基于YOLO11的航空安保与异常无人机检测系统(Python源码+数据集+Pyside6界面)
开发语言·人工智能·python·yolo·计算机视觉·无人机
源来猿往15 小时前
yolov8n结构化剪枝
算法·yolo·剪枝
才不做选择20 小时前
基于 YOLOv8 的部落冲突 (Clash of Clans) 目标检测系统
人工智能·python·yolo·目标检测
棒棒的皮皮1 天前
【深度学习】YOLO核心原理介绍
人工智能·深度学习·yolo·计算机视觉
吃人陈乐游刘2 天前
08实战经验yoloV8部署(2026年01月)
yolo
熬夜不洗澡2 天前
如何在pycharm中使用Yolo
ide·yolo·pycharm
智驱力人工智能2 天前
从占座到智座 非授权人员座位占用监测系统的产品化思考与实践 椅位占用检测 非员工座位占用AI预警 边缘计算非授权座位识别设备
人工智能·opencv·算法·安全·yolo·计算机视觉·边缘计算
AI浩2 天前
SPDC-YOLO:基于改进YOLOv8的高效无人机航拍图像小目标检测网络
yolo·目标检测·无人机