当前位置: 首页 > article >正文

PyAutoGUI实战:给你的旧软件做个‘外挂’,自动完成游戏日常或软件测试

PyAutoGUI实战用Python打造智能自动化助手解放双手提升效率在数字时代重复性任务如同无形的枷锁消耗着我们的时间和精力。想象一下每天打开电脑后你需要重复点击十几个相同的按钮填写相同的表格或者完成游戏中的日常任务——这些机械操作不仅枯燥乏味还占据了本可用于创造性工作的宝贵时间。这就是为什么越来越多的开发者和效率追求者开始关注自动化技术而PyAutoGUI作为Python生态中的自动化利器正成为解决这类问题的首选工具。1. 自动化基础PyAutoGUI核心功能解析PyAutoGUI的核心价值在于它能够模拟人类的鼠标和键盘操作让计算机学会如何与各种应用程序交互。与需要API支持的自动化方案不同PyAutoGUI直接操作图形界面这使得它能够兼容几乎所有软件——从古老的桌面应用到最新的网页服务。安装PyAutoGUI非常简单只需一条命令pip install pyautogui安装完成后我们可以立即开始探索它的基础功能。首先需要了解的是屏幕坐标系统PyAutoGUI将屏幕视为一个二维坐标系左上角为原点(0,0)x轴向右延伸y轴向下延伸。获取屏幕分辨率和当前鼠标位置是开始任何自动化操作的第一步import pyautogui # 获取屏幕尺寸 screen_width, screen_height pyautogui.size() print(f屏幕分辨率: {screen_width}x{screen_height}) # 获取鼠标当前位置 current_x, current_y pyautogui.position() print(f鼠标当前位置: ({current_x}, {current_y}))鼠标控制是PyAutoGUI最常用的功能之一它提供了多种方式来精确控制鼠标行为moveTo(x,y)将鼠标移动到绝对坐标位置moveRel(xOffset,yOffset)相对于当前位置移动鼠标click()在当前位置点击鼠标dragTo(x,y)按住鼠标拖动到指定位置scroll(amount)模拟鼠标滚轮滚动键盘操作同样强大可以模拟几乎所有的键盘输入# 输入字符串 pyautogui.typewrite(Hello, world!, interval0.1) # 每个字符间隔0.1秒 # 按下特殊键 pyautogui.press(enter) # 按回车键 pyautogui.hotkey(ctrl, c) # 组合键CtrlC提示在实际使用中建议在关键操作之间加入适当的延迟如pyautogui.sleep(0.5)以避免操作执行过快导致程序无法响应。2. 图像识别让自动化更智能单纯依赖坐标的自动化脚本存在明显局限——一旦界面元素位置发生变化脚本就会失效。为了解决这个问题PyAutoGUI提供了基于图像识别的定位功能这大大提高了自动化脚本的健壮性。图像识别的工作原理是事先保存目标按钮或区域的截图然后在屏幕上搜索匹配该图像的区域。这种方法不依赖于绝对坐标即使界面元素位置改变只要外观不变脚本仍能正常工作。# 定位屏幕上开始按钮的位置 start_button_location pyautogui.locateOnScreen(start_button.png) if start_button_location: # 计算图像中心点坐标 button_x, button_y pyautogui.center(start_button_location) pyautogui.click(button_x, button_y) else: print(未找到开始按钮)为了提高图像识别的成功率有几个实用技巧截图质量确保截图清晰背景尽可能简单置信度参数使用confidence参数允许部分匹配适用于不同分辨率或轻微变化区域限制指定搜索区域缩小范围提高速度和准确率# 在屏幕特定区域(左,上,宽,高)内搜索设置90%置信度 location pyautogui.locateOnScreen(icon.png, region(100,100,500,500), confidence0.9)对于更复杂的图像识别需求可以结合OpenCV进行高级处理import cv2 import numpy as np # 读取模板图像 template cv2.imread(button_template.png, 0) # 截取屏幕 screenshot pyautogui.screenshot() screen np.array(screenshot) screen_gray cv2.cvtColor(screen, cv2.COLOR_BGR2GRAY) # 使用OpenCV进行模板匹配 res cv2.matchTemplate(screen_gray, template, cv2.TM_CCOEFF_NORMED) threshold 0.8 loc np.where(res threshold)3. 实战案例游戏日常任务自动化让我们通过一个实际案例来展示PyAutoGUI的强大能力——自动化完成游戏中的日常任务。这类任务通常包括登录、领取奖励、完成简单副本等重复性操作非常适合用自动化脚本处理。案例设计思路自动登录游戏客户端检测并领取每日奖励完成指定次数的副本挑战处理可能出现的异常情况如网络延迟、弹窗干扰import pyautogui import time def login_game(): # 定位并点击游戏图标 game_icon pyautogui.locateOnScreen(game_icon.png, confidence0.8) if game_icon: x, y pyautogui.center(game_icon) pyautogui.click(x, y) time.sleep(5) # 等待游戏启动 # 输入账号密码 pyautogui.click(300, 200) # 点击账号输入框 pyautogui.typewrite(my_account) pyautogui.click(300, 250) # 点击密码输入框 pyautogui.typewrite(my_password) pyautogui.press(enter) # 按回车登录 time.sleep(10) # 等待登录完成 def claim_daily_reward(): # 尝试定位奖励按钮 reward_button pyautogui.locateOnScreen(daily_reward.png, confidence0.7) if reward_button: x, y pyautogui.center(reward_button) pyautogui.click(x, y) print(成功领取每日奖励) time.sleep(3) # 关闭奖励弹窗 pyautogui.click(800, 100) else: print(今日奖励已领取或未找到奖励按钮) def run_dungeon(times3): for i in range(times): # 进入副本 enter_btn pyautogui.locateOnScreen(enter_dungeon.png) if enter_btn: x, y pyautogui.center(enter_btn) pyautogui.click(x, y) time.sleep(5) # 自动战斗 pyautogui.click(900, 500) # 点击开始战斗 time.sleep(60) # 等待战斗完成 # 退出副本 pyautogui.click(50, 50) # 点击退出按钮 time.sleep(3) else: print(未找到副本入口) break # 主程序 try: login_game() claim_daily_reward() run_dungeon(3) except Exception as e: print(f自动化执行出错: {e})注意游戏自动化可能违反某些游戏的服务条款在实际应用前请确保了解相关规定本案例仅用于技术学习目的。4. 高级技巧打造健壮的自动化脚本要让自动化脚本真正实用必须考虑各种异常情况和边缘条件。以下是提升脚本可靠性的关键策略4.1 异常处理与重试机制自动化过程中可能遇到各种问题元素未加载完成、网络延迟、意外弹窗等。良好的异常处理可以防止脚本因小问题而完全失败。def safe_click(image_path, max_attempts3, delay1): attempts 0 while attempts max_attempts: try: location pyautogui.locateOnScreen(image_path, confidence0.8) if location: x, y pyautogui.center(location) pyautogui.click(x, y) return True except Exception as e: print(f尝试 {attempts1} 失败: {e}) attempts 1 time.sleep(delay) return False # 使用安全点击函数 if not safe_click(important_button.png): print(无法点击重要按钮退出程序) exit(1)4.2 状态检测与条件等待不要依赖固定的等待时间而是检测特定状态变化后再继续执行。这可以显著提高脚本效率。def wait_until(image_path, timeout10): start_time time.time() while time.time() - start_time timeout: if pyautogui.locateOnScreen(image_path, confidence0.7): return True time.sleep(0.5) return False # 等待加载完成 if wait_until(loading_complete.png, 15): print(页面加载完成继续执行) else: print(等待超时可能出现了问题)4.3 日志记录与调试完善的日志系统可以帮助快速定位问题所在。考虑记录关键操作和屏幕截图以便后续分析。import logging from datetime import datetime # 配置日志 logging.basicConfig(filenameautomation.log, levellogging.INFO) def log_action(action, successTrue, screenshotFalse): timestamp datetime.now().strftime(%Y-%m-%d %H:%M:%S) status 成功 if success else 失败 logging.info(f[{timestamp}] {action} {status}) if screenshot and not success: timestamp_str datetime.now().strftime(%Y%m%d_%H%M%S) pyautogui.screenshot(ferror_{timestamp_str}.png) # 使用日志记录 try: log_action(点击登录按钮) pyautogui.click(100, 100) log_action(点击登录按钮, True) except Exception as e: log_action(点击登录按钮, False, True)4.4 参数化与配置管理将可变参数如坐标、等待时间、重试次数等提取到配置文件中使脚本更易于维护和调整。import json # 读取配置文件 with open(config.json) as f: config json.load(f) # 使用配置参数 login_button_pos config[positions][login_button] wait_time config[timing][page_load] max_retries config[retry][max_attempts]5. 自动化测试GUI应用的质量保障除了游戏和日常任务自动化PyAutoGUI在软件测试领域也有广泛应用。它可以模拟真实用户操作对图形界面应用进行功能测试和回归测试。5.1 基本测试流程一个典型的GUI自动化测试包含以下步骤启动被测应用程序执行一系列预定义操作验证界面响应和结果是否符合预期生成测试报告def test_login_function(): 测试登录功能 # 启动应用 app_path C:\\Program Files\\MyApp\\app.exe import subprocess subprocess.Popen(app_path) time.sleep(5) # 输入测试凭证 pyautogui.click(200, 150) # 用户名输入框 pyautogui.typewrite(test_user) pyautogui.click(200, 180) # 密码输入框 pyautogui.typewrite(test_pass) pyautogui.press(enter) # 验证登录结果 time.sleep(2) if pyautogui.locateOnScreen(welcome_message.png): print(登录测试通过) return True else: print(登录测试失败) return False5.2 测试框架集成PyAutoGUI可以与主流测试框架如pytest结合构建更专业的自动化测试套件。import pytest pytest.mark.gui def test_main_features(): 测试应用主要功能 assert test_login_function(), 登录功能失败 assert test_data_import(), 数据导入功能失败 assert test_report_generation(), 报表生成功能失败 def test_data_import(): # 测试数据导入功能 pass def test_report_generation(): # 测试报表生成功能 pass5.3 视觉验证测试对于界面布局和视觉元素的测试可以结合图像比较技术def compare_with_baseline(screenshot_name, threshold0.95): 将当前屏幕与基准图像比较 baseline cv2.imread(fbaselines/{screenshot_name}.png, 0) current np.array(pyautogui.screenshot()) current_gray cv2.cvtColor(current, cv2.COLOR_BGR2GRAY) # 计算结构相似性 from skimage.metrics import structural_similarity as ssim similarity ssim(baseline, current_gray) if similarity threshold: return True else: # 保存差异图像 diff cv2.absdiff(baseline, current_gray) cv2.imwrite(fdiffs/{screenshot_name}.png, diff) return False在实际项目中PyAutoGUI测试脚本可以集成到CI/CD流程中作为质量关卡的一部分。虽然它不能完全替代单元测试和API测试但对于验证端到端用户流程和界面行为非常有效。

相关文章:

PyAutoGUI实战:给你的旧软件做个‘外挂’,自动完成游戏日常或软件测试

PyAutoGUI实战:用Python打造智能自动化助手,解放双手提升效率 在数字时代,重复性任务如同无形的枷锁,消耗着我们的时间和精力。想象一下,每天打开电脑后,你需要重复点击十几个相同的按钮,填写相…...

DOL-CHS-MODS整合包:从新手入门到定制开发的完整指南

DOL-CHS-MODS整合包:从新手入门到定制开发的完整指南 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS 一、需求定位:你属于哪种玩家类型? 场景描述 不同玩家对游…...

3分钟搞定Windows软件安装难题:winget-install终极解决方案

3分钟搞定Windows软件安装难题:winget-install终极解决方案 【免费下载链接】winget-install Install WinGet using PowerShell! Prerequisites automatically installed. Works on Windows 10/11 and Server 2019/2022. 项目地址: https://gitcode.com/gh_mirror…...

seo优化机构怎样选择才合适_什么是seo优化机构

SEO优化机构怎样选择才合适_什么是SEO优化机构 在当今的数字化时代,拥有一个高效的网站已经不再是企业竞争力的唯一标准,更重要的是这个网站能够在搜索引擎上获得良好的排名。这就是搜索引擎优化(SEO)的重要性所在。选择一个合适…...

如何解决Tokio项目中Windows平台TCP性能问题的完整指南

如何解决Tokio项目中Windows平台TCP性能问题的完整指南 【免费下载链接】tokio A runtime for writing reliable asynchronous applications with Rust. Provides I/O, networking, scheduling, timers, ... 项目地址: https://gitcode.com/GitHub_Trending/to/tokio To…...

DOL-CHS-MODS整合包零基础精通指南:从安装到定制全方位教程

DOL-CHS-MODS整合包零基础精通指南:从安装到定制全方位教程 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS 项目价值定位 DOL-CHS-MODS作为Degrees of Lewdity的中文整合方案&#xff0…...

大数据:Hadoop(Yarn)

第1章 Yarn资源调度器Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而MapReduce等运算程序则相当于运行于操作系统之上的应用程序。1.1 Yarn基础架构1.2 Yarn工作机制(1)…...

嵌入式开发中数据结构的优化与应用实践

1. 数据结构在嵌入式开发中的核心价值作为一名在嵌入式领域摸爬滚打十年的老兵,我深刻体会到数据结构就像瑞士军刀里的各种工具——选对工具能让工作事半功倍。在资源受限的MCU环境中,一个精心选择的数据结构可能意味着程序能否流畅运行和内存是否会爆掉…...

阿里达摩院GTE中文向量模型效果展示:中文方言书面语语义对齐能力验证

阿里达摩院GTE中文向量模型效果展示:中文方言书面语语义对齐能力验证 1. 模型核心能力概览 GTE (General Text Embeddings) 是阿里达摩院推出的通用文本向量模型,专门针对中文场景深度优化。这个模型最大的特点是将文本转换为高质量的1024维向量表示&a…...

Qwen3.5-9B生产环境实测:7x24小时稳定运行+自动恢复+错误率<0.3%运维报告

Qwen3.5-9B生产环境实测&#xff1a;7x24小时稳定运行自动恢复错误率<0.3%运维报告 1. 项目概述 Qwen3.5-9B是一款拥有90亿参数的开源大语言模型&#xff0c;在实际生产环境中展现出卓越的稳定性和可靠性。经过长达一个月的7x24小时不间断运行测试&#xff0c;该系统实现了…...

**跨平台开发新范式:Flutter + Dart实战构建高性能多端应用**在移动与桌面融

跨平台开发新范式&#xff1a;Flutter Dart 实战构建高性能多端应用 在移动与桌面融合加速的今天&#xff0c;跨平台开发早已不是“妥协”的代名词&#xff0c;而是开发者提升效率、降低维护成本的核心策略。本文将带你深入 Flutter Dart 的实战体系&#xff0c;通过真实项目…...

StreamlabsArduinoAlerts:嵌入式设备接入Twitch直播事件

1. StreamlabsArduinoAlerts 库深度解析&#xff1a;嵌入式设备接入 Twitch 直播事件的完整实现方案 StreamlabsArduinoAlerts 是一个专为资源受限嵌入式平台设计的轻量级 C 库&#xff0c;其核心目标是让 Arduino、ESP8266、ESP32、Particle 及基于 ATmega/STM32 的 MCU 能够直…...

Matterport3D数据集:从全景构建到三维理解的实践指南

1. Matterport3D数据集全景解析 第一次接触Matterport3D数据集时&#xff0c;我被它庞大的数据规模震撼到了。这个数据集包含了90个完整的建筑场景&#xff0c;由194,400张RGB-D图像组成&#xff0c;覆盖了10,800个全景视角。简单来说&#xff0c;它就像是用专业相机把整栋房子…...

Qwen3.5-9B多场景应用:心理咨询对话记录分析+情绪倾向识别案例

Qwen3.5-9B多场景应用&#xff1a;心理咨询对话记录分析情绪倾向识别案例 1. 项目概述 Qwen3.5-9B是一款拥有90亿参数的开源大语言模型&#xff0c;具备强大的逻辑推理、代码生成和多轮对话能力。该模型特别适合处理心理咨询对话记录分析任务&#xff0c;能够准确识别对话中的…...

新手避坑指南:用STC89C51和DHT11搭建温湿度报警器(附Keil5代码调试心得)

从零搭建温湿度报警器&#xff1a;STC89C51与DHT11实战避坑手册 第一次接触51单片机项目时&#xff0c;那种既兴奋又忐忑的心情至今记忆犹新。看着网上的开源项目资料&#xff0c;满心以为按部就班就能成功&#xff0c;结果从元器件选型到代码烧录&#xff0c;几乎每一步都踩了…...

TP4056充电板实战避坑指南:从LED状态误判到TEMP脚悬空,新手最容易踩的5个坑

TP4056充电板实战避坑指南&#xff1a;从LED状态误判到TEMP脚悬空&#xff0c;新手最容易踩的5个坑 第一次使用TP4056充电板时&#xff0c;我盯着闪烁的LED灯陷入了困惑——为什么充满电后红灯还亮着&#xff1f;为什么电池发热异常&#xff1f;这些问题让我意识到&#xff0c;…...

GLM-4.1V-9B-Base应用场景:零售货架图像识别与SKU自动盘点方案

GLM-4.1V-9B-Base应用场景&#xff1a;零售货架图像识别与SKU自动盘点方案 1. 零售行业面临的库存管理挑战 走进任何一家超市或便利店&#xff0c;你都会看到整齐排列的商品货架。但你可能不知道的是&#xff0c;这些看似简单的货架背后隐藏着一个巨大的管理难题 - 库存盘点。…...

Arduino嵌入式SD卡逐行读取库ReadLines详解

1. 项目概述ReadLines 是一个专为 Arduino 平台设计的轻量级文件行读取库&#xff0c;核心目标是解决嵌入式系统中对 SD 卡文本文件进行逐行解析这一高频但易出错的操作需求。在资源受限的 MCU 环境下&#xff08;如 ESP8266、STM32F103C8T6、ATmega328P&#xff09;&#xff0…...

Visual C++组件维护完全指南:从问题诊断到系统优化

Visual C组件维护完全指南&#xff1a;从问题诊断到系统优化 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist Visual C组件维护是Windows系统稳定运行的关键环节&…...

Android安全漏洞案例分析:血淋淋的教训

Android安全漏洞案例分析&#xff1a;血淋淋的教训 Android安全漏洞案例分析&#xff1a;血淋淋的教训 案例一&#xff1a;Secret Token泄露导致账户劫持 漏洞危害&#xff1a;攻击者获取用户全部权限 某社交App在客户端硬编码了API密钥&#xff0c;攻击者通过反编译获取密钥…...

Adafruit NeoMatrix 原理与坐标映射详解

1. 项目概述 Adafruit NeoMatrix 是一款专为 NeoPixel 矩阵与网格显示设备设计的嵌入式图形库&#xff0c;其核心定位是作为 Adafruit_GFX 图形抽象层的硬件适配实现。它并非独立渲染引擎&#xff0c;而是通过继承并扩展 Adafruit_GFX 的绘图接口&#xff08;如 drawPixel() …...

电路原理与人生哲学的奇妙对应关系

1. 电路与人生的奇妙映射作为一名在电子行业摸爬滚打十多年的工程师&#xff0c;我常常惊叹于电路原理与人生百态之间的惊人相似。记得刚入行时&#xff0c;我的导师就说过&#xff1a;"读懂电路&#xff0c;就读懂了人生。"当时只觉得是句玩笑话&#xff0c;直到这些…...

Krita 5.3.0 与 6.0.0 发布:功能升级与技术革新

文本与工具革新&#xff0c;Krita 功能升级Krita 5.3.0 和 6.0.0 正式推出&#xff0c;带来了一系列显著的功能改进。文本工具被完全重写&#xff0c;支持在画布上进行所见即所得编辑&#xff0c;还能支持 OpenType 的所有特性以及文本置入形状&#xff0c;这大大提升了文字处理…...

ESP32 ILI9341高性能驱动:64字节DMA突发传输优化

1. 项目概述ILI9341_ESP32 是一款专为 ESP32 平台深度优化的 ILI9341 TFT LCD 显示驱动库。其核心设计目标并非简单实现显示功能&#xff0c;而是在硬件能力边界内榨取极致帧率与响应性能。该库直面 ESP32 的 SPI 总线特性——支持 64 字节一次性突发传输&#xff08;burst tra…...

Polars 2.0清洗性能天花板在哪?实测对比Dask/Modin/Vaex:单机1TB数据清洗仅需11.3秒(附完整安装脚本)

第一章&#xff1a;Polars 2.0 大规模数据清洗技巧Polars 2.0 引入了更严格的惰性执行模型、增强的字符串与时间处理能力&#xff0c;以及原生支持多线程 I/O 的 LazyFrame API&#xff0c;显著提升了 TB 级数据清洗的吞吐与可控性。相比 Pandas&#xff0c;其列式内存布局与零…...

MotorController:嵌入式伺服电机驱动的确定性执行封装

1. 项目概述MotorController是一个面向伺服系统电机控制的轻量级工具类&#xff0c;其设计目标并非替代完整的运动控制固件栈&#xff0c;而是为嵌入式工程师提供一套可直接集成、低侵入、高可控性的底层电机驱动封装。该类不依赖特定硬件抽象层&#xff08;HAL&#xff09;或实…...

学习框架和推理引擎有什么区别

​​​​​​学习框架和推理引擎通常分别应用在 AI 大模型的训练和推理 &#xff08;运行&#xff09;阶段。模型的核心任务是从大量数据中学习规律&#xff0c;完成特定预测或者生成任务&#xff0c;前者即“模型训练”&#xff0c;后者即“模型运行”。在模型训练时&#xff…...

OpenClaw批量任务队列:百川2-13B-4bits量化版处理百条邮件自动回复

OpenClaw批量任务队列&#xff1a;百川2-13B-4bits量化版处理百条邮件自动回复 1. 为什么需要邮件自动回复系统 上周我收到了一封来自老客户的紧急咨询邮件&#xff0c;当时正在外地参加会议无法及时回复。等三天后回到电脑前&#xff0c;发现邮箱里堆积了127封未读邮件——其…...

无代码自动化:OpenClaw+Qwen3.5-9B可视化流程搭建

无代码自动化&#xff1a;OpenClawQwen3.5-9B可视化流程搭建 1. 为什么选择OpenClawQwen3.5-9B组合 去年夏天&#xff0c;我发现自己每周要花3小时重复做三件事&#xff1a;整理会议录音、提取待办事项、设置日历提醒。当我尝试用传统自动化工具时&#xff0c;要么需要写代码…...

Java程序员的云原生时代生存指南:面向软件测试从业者的专业视角

在技术浪潮的冲击下&#xff0c;云原生已从概念演进为产业标准。对于广大Java程序员而言&#xff0c;这既是挑战也是机遇。传统的技术栈和开发模式正在经历深刻变革&#xff0c;而软件测试作为保障质量的关键环节&#xff0c;其理念与实践也随之迭代。 一、 挑战审视&#xff…...