告别手动肝代币!用Python+PyAutoGUI实现云顶之弈24小时自动对局(附完整代码与截图素材)
2026/5/31 13:15:14 网站建设 项目流程

用Python+PyAutoGUI打造云顶之弈全自动代币收割机

云顶之弈作为一款自走棋游戏,其代币获取机制对休闲玩家来说往往需要投入大量时间。本文将手把手教你构建一个7×24小时稳定运行的自动化脚本,从环境配置到异常处理全覆盖,即使Python新手也能快速上手。

1. 环境准备与工具链搭建

1.1 必备软件安装清单

  • Python 3.8+:推荐使用Anaconda管理环境
  • PyAutoGUI 0.9.53:核心自动化控制库
  • OpenCV 4.5+:图像识别精度保障
  • Pillow 9.0+:截图处理依赖库

安装命令如下:

pip install pyautogui opencv-python pillow

1.2 游戏客户端设置要点

窗口模式配置技巧

  1. 分辨率设为1920×1080(适配多数屏幕截图)
  2. 关闭所有弹窗通知
  3. 禁用游戏内动态壁纸
  4. 将客户端语言统一为英文(提升识别率)

注意:不同语言客户端的按钮位置可能不同,本文以国际服英文界面为例

2. 图像素材采集与处理

2.1 关键按钮截图规范

需要采集的按钮包括:

  • 开始游戏(PLAY)
  • 接受对局(ACCEPT)
  • 投降确认(SURRENDER)
  • 再来一局(PLAY AGAIN)

截图最佳实践

  1. 使用Windows自带的Snipping Tool
  2. 保存为PNG格式
  3. 命名规范:button_功能_en.png
  4. 统一存放在项目目录的/assets文件夹

2.2 图像识别优化技巧

通过OpenCV提升识别成功率:

import cv2 import numpy as np def enhance_image(image_path): img = cv2.imread(image_path) # 灰度化+边缘增强 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) edges = cv2.Canny(gray, 100, 200) return edges

3. 核心代码实现与解析

3.1 基础自动化流程

import pyautogui import time from random import uniform class AutoTFT: def __init__(self): self.confidence = 0.85 # 识别置信度 self.interval = 2 # 操作间隔(秒) def locate_click(self, img): """带随机延迟的点击操作""" pos = pyautogui.locateCenterOnScreen(img, confidence=self.confidence) if pos: time.sleep(uniform(0.1, 0.3)) # 随机延迟防检测 pyautogui.click(pos) return True return False

3.2 完整工作流实现

def main_loop(): bot = AutoTFT() while True: # 阶段1:开始匹配 if bot.locate_click('assets/button_play_en.png'): time.sleep(10) # 匹配等待 # 阶段2:接受对局 if bot.locate_click('assets/button_accept_en.png'): time.sleep(60) # 游戏加载 # 阶段3:投降操作 if bot.locate_click('assets/button_surrender_en.png'): time.sleep(5) bot.locate_click('assets/button_confirm_en.png') # 阶段4:再来一局 bot.locate_click('assets/button_playagain_en.png') time.sleep(bot.interval)

4. 高级稳定性优化方案

4.1 异常处理机制

常见异常类型及应对策略:

异常场景检测方法恢复方案
客户端崩溃进程检测自动重启游戏
网络断开ping测试等待重连
识别失败超时控制重置游戏状态
更新提示图像比对发送通知提醒

4.2 防检测策略

行为随机化实现

def human_like_move(x, y): """拟人化鼠标移动""" duration = uniform(0.2, 0.5) steps = int(duration * 100) pyautogui.moveTo(x, y, duration, pyautogui.easeInOutQuad) # 随机微小抖动 for _ in range(steps): offset_x = uniform(-3, 3) offset_y = uniform(-3, 3) pyautogui.moveRel(offset_x, offset_y)

4.3 日志监控系统

import logging from datetime import datetime logging.basicConfig( filename='autotft.log', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s' ) def log_action(action): logging.info(f"{action} at {datetime.now().strftime('%H:%M:%S')}") print(f"[System] {action} executed")

5. 部署与长期运行方案

5.1 服务器运行建议

  • 使用Windows Server系统
  • 配置TeamViewer远程控制
  • 设置定时重启(每6小时)
  • 启用自动登录功能

5.2 性能监控仪表盘

基础资源监控代码:

import psutil import matplotlib.pyplot as plt def monitor_system(): cpu = psutil.cpu_percent() mem = psutil.virtual_memory().percent return { 'cpu': cpu, 'memory': mem, 'timestamp': datetime.now() }

6. 常见问题排错指南

6.1 图像识别失败排查流程

  1. 检查截图是否被遮挡
  2. 验证颜色模式(RGB/BGR)
  3. 调整置信度参数(0.7-0.9)
  4. 检查屏幕缩放比例(应设为100%)

6.2 典型错误代码对照表

错误提示可能原因解决方案
ImageNotFoundException截图路径错误检查文件路径和扩展名
FailSafeException鼠标移出屏幕禁用fail-safe机制
TypeError分辨率不匹配统一使用1920×1080

7. 进阶开发方向

7.1 多账号轮换系统

accounts = [ {"user": "account1", "password": "xxx"}, {"user": "account2", "password": "xxx"} ] def switch_account(index): # 实现账号切换逻辑 pass

7.2 智能策略模块

根据对局时长动态调整

def adaptive_strategy(): avg_game_time = get_average_time() if avg_game_time > 1200: # 20分钟 return "aggressive" else: return "conservative"

实际测试中发现,在凌晨时段将置信度参数下调0.05能显著提升识别成功率,这可能与服务器负载导致的渲染延迟有关。建议在/assets文件夹中存放不同时段的截图备选方案,脚本可以根据系统时间自动选择最优图像模板。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询