# 自动化 **Repository Path**: mtjllb/automation ## Basic Information - **Project Name**: 自动化 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-22 - **Last Updated**: 2025-08-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 红果脚本测试 ## 项目介绍 这是一个用于测试红果脚本的项目,包含自动化框架,支持脚本管理、蓝牙通信、图像识别和应用控制。框架采用模块化设计,便于添加和删除脚本,公共功能抽离成全局工具类,配置集中管理。 ## 代码变动记录 - 创建 `core/automation_framework.py`,实现自动化框架核心类(BluetoothController、ImageRecognition、AppController、AutomationFramework) - 创建 `config/scripts_config.py`,实现脚本配置管理 - 修改 `__init__.py`,使其成为自动化框架启动入口,导入并初始化框架,提供便捷访问接口 - 创建 `core/__init__.py`,使 core 目录成为有效的 Python 包 - 创建 `config/__init__.py`,使 config 目录成为有效的 Python 包 - 修改 `__init__.py`,添加将当前目录添加到 Python 路径的代码,解决模块导入问题 - 创建 `scripts/example_script.py`,提供框架使用示例 - 创建 `scripts/__init__.py`,使 scripts 目录成为有效的 Python 包 - 修改 `__init__.py`,添加导入、注册和运行示例脚本的代码 - 创建 `scripts/custom_script_template.py` 文件,提供自定义脚本模板 - 创建 `HOWTO.md` 文件,提供自定义脚本编写和运行指南 - 修改 `scripts/example_script.py`,添加模板找图示例代码,演示图像识别功能的使用方法 - 修改 `scripts/example_script.py`,增强找图功能的异常处理和结果格式检查,解决运行时异常问题 - 修改 `scripts/example_script.py`,根据ascript.md文档更新找图结果处理逻辑,使用'center_x'和'center_y'键获取坐标 - 修改 `core/automation_framework.py`,更新ImageRecognition.find_template方法的实现,使其返回中心点坐标元组,并增强结果格式检查和异常处理 - 修改 `scripts/example_script.py`,更新find_template方法调用和返回值处理逻辑,使其适应方法返回中心点坐标元组的变化 - 修改 `scripts/example_script.py`,添加WaitUtils工具类的使用示例,展示固定时间等待和随机时间等待功能 - 修改 `config/scripts_config.py`,完善脚本配置信息,添加详细描述、运行时间窗口、失败重试次数,并为脚本添加实际参数配置示例 - 修改 `config/scripts_config.py`,添加脚本配置验证和使用相关函数:validate_script_config、can_run_script、get_script_priority、get_script_timeout、get_script_retry_count、get_script_parameters - 修改 `__init__.py`,导出新添加的配置函数,使其可通过framework.export访问 - 修改 `scripts/example_script.py`,添加使用新配置功能的示例代码,展示如何检查脚本是否可以运行、获取优先级、超时时间和重试次数等配置 - 修改 `core/automation_framework.py`,更新 `register_script` 方法,添加对脚本优先级、超时时间、重试次数和启用状态的支持 - 修改 `core/automation_framework.py`,更新 `run_script` 方法,添加脚本超时控制、失败重试和启用状态检查功能 - 修改 `core/automation_framework.py`,添加 `_run_script_with_timeout` 私有方法,实现脚本执行的超时机制 - 修改 `__init__.py`,更新脚本注册逻辑,传递脚本启用状态参数给 `register_script` 方法 - 修改 `__init__.py`,实现脚本按优先级排序逻辑,并按优先级顺序运行所有脚本 - 修改 `scripts/hg_script.py`,修复应用打开逻辑,使用AppController.open_app静态方法代替framework.app.open_app - 创建 `core/image_recognition_tool.py`,实现图像识别工具类,封装通用的图像识别功能 - 修改 `scripts/hg_script.py`,使用`ImageRecognitionTool`工具类优化图像识别逻辑 - 重构 `scripts/hg_script.py`,将代码拆分为多个辅助函数(蓝牙连接检查、应用打开、首页图标点击等),并添加详细注释,提高代码可读性和可维护性 - 修改 `scripts/hg_script.py`,新增以下功能: - 验证赚钱页面(查找hg宝箱图片) - 向下滑动两次操作 - 查找并点击hg红包雨图片 - 优化脚本流程控制,添加条件判断和错误处理 - 修改 `core/automation_framework.py`,添加获取屏幕信息接口: - 导入 `ascript.android.system.Device` - 添加 `display = Device.display()` 获取屏幕显示对象 - 实现 `get_screen_info()` 方法,返回包含屏幕宽高、密度和旋转角度的字典 - 修改 `scripts/hg_script.py` 中的 `_swipe_down_twice` 函数: - 使用 `framework.get_screen_info()` 获取屏幕信息 - 实现基于屏幕信息的随机滑动,每次滑动添加不同的随机偏移量 - 优化函数注释,添加详细说明 - 修复蓝牙滑动方法名称错误,将 `swipe` 改为 `slide` - 调整滑动参数传递方式,使用关键字参数 `dur` 指定持续时间 - 修改 `scripts/hg_script.py` 中的 `_click_home_icon` 函数: - 将函数重命名为 `_verify_home_page` - 修改函数功能为仅验证首页图标存在(搜图成功),不再执行点击操作 - 更新函数注释,明确其验证功能 - 更新 `run_hg_script` 主函数中的调用,将 `_click_home_icon` 改为 `_verify_home_page` - 更新相关流程注释,将"点击首页图标"改为"验证是否在首页(查找首页图标)" - 修改 `scripts/hg_script.py` 中的 `_close_money_popup` 函数: - 重构函数以处理多种弹窗类型 - 使用配置列表定义不同的弹窗类型(包含图像名称、查找区域和描述) - 依次尝试识别和关闭每种弹窗 - 调整返回逻辑:如果没有弹窗或成功关闭任何一个弹窗,均返回True - 添加详细注释说明函数功能和参数 - 增加等待时间确保关闭操作完成 - 重构 `scripts/hg_script.py` 中的滑动功能: - 将 `_swipe_down_twice` 函数重命名为 `_swipe_until_red_envelope` - 实现持续向下滑动直到检测到红包雨或达到最大滑动次数(30次)的功能 - 调整滑动距离:从屏幕高度的9/10滑动到屏幕高度的2/3(单次滑动距离约为屏幕高度的7/30,~23.3%) - 每次滑动前先检测是否已出现红包雨图片 - 保留基于屏幕信息的随机滑动逻辑和参数 - 函数返回是否成功检测到红包雨 - 更新主流程中的调用,根据检测结果决定是否点击红包雨图片 - 创建 `core/yolov5_recognition.py`,实现YOLOv5目标检测接口: - 提供加载Yolov8Ncnn模型功能 - 实现图像中目标检测并返回检测结果的接口 - 支持在屏幕上绘制检测到的目标 - 支持自定义模型参数和检测配置 - 遵循项目接口设计规范,便于集成和使用 - 修改 `scripts/hg_script.py`,集成Yolov8Ncnn目标检测功能: - 在查找并点击hg红包雨图片后,添加Yolov8Ncnn识别红包雨目标的代码 - 更新模型加载、目标检测和结果处理的流程 - 调整异常处理机制,确保脚本稳定运行 - 重构 `core/yolov5_recognition.py`,更换为Yolov8Ncnn接口: - 更新导入语句,从 `from ascript.android import plug` 和 `import yolov5` 改为 `from ascript.android.system import R` 和 `import Yolov8Ncnn as yolo` - 修改模型加载方式,从加载云端模型改为加载本地模型参数文件 - 更新检测函数,从 `find_all` 改为 `detect` - 添加屏幕绘制目标功能 - 调整结果格式化逻辑,适配新的返回数据结构 - 修改 `scripts/hg_script.py`,更新YOLOv8目标检测的点击位置计算逻辑: - 从计算目标中心坐标 `(left + right) // 2, (top + bottom) // 2` 改为计算目标最下面点的中心点 `(left + right) // 2, bottom` - 修复打印语句中的语法错误 - 移除重复的点击操作,只保留最下面点的中心点点击逻辑 - 修改 `scripts/hg_script.py`,优化红包雨图片识别和Yolov8Ncnn模型调用逻辑: - 只有在hg红包雨图片识别和点击成功后,才会调用Yolov8Ncnn模型 - 添加识别失败时的处理逻辑,避免不必要的模型加载 - 优化日志输出,添加识别失败的提示信息 - 当识别失败时,添加范围搜图查找"hg红包雨稍后再领.png"图片 - 如果成功识别到"hg红包雨稍后再领.png",打印提示信息表明红包雨未在时间范围内 - 如果未识别到,也打印相应提示信息 - 修改 `scripts/hg_script.py`,添加红包雨视频翻倍功能: - 修改 `scripts/hg_script.py` 中的 `_swipe_until_red_envelope` 函数: - 修复变量引用错误:将 `bottom_threshold` 和 `top_threshold` 变量定义移到使用之前 - 调整滑动参数以满足用户需求: - 更改基准滑动距离,从约30%屏幕高度改为约3-5%(50-100像素) - 调整随机偏移量范围:x轴从-50到50改为-20到20,y轴从-50到80改为-15到15 - 重新计算滑动起点和终点坐标,确保单次滑动距离在50-100像素范围内 - 优化滑动逻辑注释,提高代码可读性 - 解耦 `scripts/hg_script.py` 文件,创建了五个新方法: - `_initYolov8Model()`: 初始化Yolov8Ncnn模型 - `_detectAndClickTargets(framework, countdownSeconds=10)`: 使用Yolov8模型检测目标并点击 - `_processLaterCollection(framework)`: 处理红包雨稍后再领逻辑 - `_processAdvertisement(framework)`: 处理广告页面逻辑 - `_handleVideoDoubling(framework)`: 处理红包雨视频翻倍逻辑 - 重构 `run_hg_script` 主函数,调用新创建的方法实现解耦,提高代码可读性和可维护性 - 优化代码结构,每个方法都添加了详细的文档字符串,说明功能、参数和返回值 - 修改 `scripts/hg_script.py` 中的 `_find_and_click_red_envelope_rain` 函数,添加二次验证逻辑: - 修改 `scripts/hg_script.py` 中的红包雨检测滑动逻辑: - 调整滑动起点和终点:从屏幕高度的9/10滑动到屏幕高度的2/3,改为从屏幕高度的8/10滑动到屏幕高度的1/2 - 增加滑动距离:从约屏幕高度的7/30(~23.3%)增加到约屏幕高度的3/10(~30%) - 减慢滑动速度:滑动持续时间从500ms增加到800ms - 更新相关注释,说明新的滑动参数 - 实现双向滑动逻辑:当滑动到底部还未检测到红包雨时,会向上滑动一段距离,然后继续向下滑动 - 添加滑动方向判断和切换机制: - 向下滑动到底部(终点y坐标接近屏幕高度的95%)时,切换为向上滑动 - 向上滑动到顶部(终点y坐标接近屏幕高度的5%)时,切换为向下滑动 - 更新函数文档字符串,说明双向滑动功能 - 调整滑动随机偏移量范围: - x轴偏移保持不变:-50到50 - y轴偏移从-30到30调整为-50到100,后又根据用户反馈优化为-50到80,控制单次滑动距离 - 添加详细注释,说明调整原因和新的偏移量参数 - 优化底部阈值检测: - 将底部阈值从屏幕高度的95%调整为90%,更容易触发向上滑动 - 添加调试信息,打印当前滑动终点坐标和阈值,便于问题排查 - 添加滑动边界限制: - 向下滑动时确保终点y坐标不超过屏幕高度-100 - 向上滑动时确保终点y坐标不低于100,避免滑动超出屏幕范围 - 将函数重命名为包含二次验证的逻辑 - 点击红包雨图片后添加1秒休眠 - 增加范围搜图验证:在区域[8,337,1044,1921]内查找"hg红包雨加载页面.png" - 根据二次验证结果返回最终状态 - 更新函数文档字符串,说明新功能和返回值含义 - 在YOLOv8模型运行成功且9秒倒计时结束后,添加范围搜图逻辑查找并点击"hg红包雨视频翻倍"图片 - 实现模型加载失败时的降级处理,也尝试查找并点击红包雨视频翻倍图片 - 添加成功点击后的视频加载等待时间 - 优化代码结构,添加详细注释说明功能实现 - 修改 `scripts/hg_script.py`,添加红包雨视频翻倍后的广告处理逻辑: - 在红包雨视频翻倍图片识别并点击成功后,添加范围搜图检测广告倒计时.png - 实现广告页面检测逻辑,循环判断广告倒计时.png直到匹配到hg广告领取图标 - 设置广告处理最大等待时间为60秒,防止无限等待 - 添加广告播放完成后的随机等待机制(5-10秒) - 实现广告领取关闭功能,查找并点击hg广告领取关闭.png - 添加完整的异常处理和日志输出,提高代码可维护性 - 修改 `scripts/hg_script.py`,添加广告领取关闭后的开心收下功能: - 在hg广告领取关闭图片识别并点击成功后,添加范围搜图查找并点击hg开心收下.png - 实现点击成功后的随机等待机制(4-6秒) - 添加相应的日志输出和错误处理,确保功能稳定运行 ## 配置文件说明 配置文件位于 `config/scripts_config.py`,包含以下主要配置项: 1. **脚本配置 (SCRIPT_CONFIGS)**: 定义各个脚本的元数据信息 - `name`: 脚本显示名称 - `description`: 脚本功能描述 - `author`: 脚本作者 - `version`: 脚本版本 - `enabled`: 是否启用脚本 - `priority`: 运行优先级,数值越低优先级越高 - `timeout`: 超时时间(秒) - `run_window`: 运行时间窗口,包含`start`和`end`字段 - `retry_count`: 失败重试次数 - `parameters`: 脚本参数配置,根据脚本功能不同而变化 - 对于清理后台任务脚本:`max_processes`(最大清理进程数)、`ignore_list`(忽略列表)、`scan_interval`(扫描间隔) - 对于红果脚本:`like_probability`(点赞概率)、`comment_probability`(评论概率)、`share_probability`(分享概率)、`max_videos`(最大观看视频数)、`watch_time_range`(观看时间范围)、`comment_templates`(评论模板) 2. **图像路径配置 (IMAGE_PATHS)**: 定义图像资源的文件路径 - 新增 `clean_button`: 清理按钮图像路径 3. **应用包名配置 (APP_PACKAGES)**: 定义各个应用的包名 4. **坐标配置 (COORDINATES)**: 定义屏幕坐标位置 - 新增 `clean_search_area`: 清理按钮查找区域 - 新增 `logo_search_area`: Logo图像查找区域 ## 框架结构 - `core/`: 核心框架代码 - `automation_framework.py`: 框架核心类实现 - `__init__.py`: 包初始化文件 - `config/`: 配置文件 - `scripts_config.py`: 脚本配置管理 - `__init__.py`: 包初始化文件 - `scripts/`: 脚本目录 - `example_script.py`: 示例脚本 - `__init__.py`: 包初始化文件 - `res/`: 资源目录 - `__init__.py`: 项目启动入口 - `README.md`: 项目说明文档 ## 使用方法 1. 确保项目目录在 Python 路径中 2. 运行项目: `python -m 红果脚本测试` 3. 框架会自动初始化并运行已注册的脚本 ## 编写自定义脚本 1. 在 `scripts/` 目录下创建新的 Python 文件 2. 定义脚本主函数,接受 framework 参数 3. 在主入口文件 `__init__.py` 中导入并注册脚本 ## 示例脚本说明 示例脚本 `example_script.py` 演示了框架的基本使用方法,包括: - 检查和重新连接蓝牙 - 获取配置信息 - 模拟点击、滑动和按键操作 运行后,脚本会执行一系列预设操作,并输出执行结果。