利用Python 进行自动化操作: Pyautogui 库

目录

1. 前言

2. 安装 PyAutoGUI

3. 常见函数介绍

3.1 鼠标操作

3.2 键盘操作

3.3 截图与图像识别 

4. 简单案例

5. 总结


1. 前言

我们常常需要与各种软件和系统交互,而人工操作往往耗时且容易出错。这时,PyAutoGUI 就可以帮我们解放双手,它是一个强大的 Python 库,能够实现对鼠标和键盘的自动化控制,模拟人类的操作行为,广泛应用于自动化测试、数据采集、重复性任务处理等场景。本文将深入浅出地介绍 PyAutoGUI 库的常见函数及其应用场景,帮助大家快速掌握这一实用工具。

2. 安装 PyAutoGUI

在开始之前,我们需要先安装 PyAutoGUI 库。打开终端或命令行,输入以下命令:

pip install pyautogui

此外,PyAutoGUI 还依赖于 Pillow 库(用于图像处理),在安装过程中会自动安装。若遇到问题,可手动安装 Pillow:

pip install pillow

3. 常见函数介绍

3.1 鼠标操作

获取鼠标位置 

import pyautogui
print(pyautogui.position())  # 输出鼠标当前坐标

移动鼠标位置  

moveTo(x, y, duration):将鼠标移动到指定的坐标位置,duration 参数可设置移动的持续时间,使鼠标移动更加自然。

pyautogui.moveTo(100, 200, 2)  # 在 2 秒内将鼠标移动到 (100, 200)

moveRel(xOffset,yOffset,duration):相对于当前位置移动鼠标,`xOffset` 和 `yOffset` 分别表示在 x 和 y 方向上的偏移量。

pyautogui.moveRel(50, -30, 1)  # 相对于当前位置向右移动 50,向上移动 30

鼠标点击

click(x, y, clicks, interval, button):在指定坐标位置进行点击操作。clicks 表示点击次数,interval 设置连续点击之间的间隔时间,button 可选择 'left'(左键)、'right'(右键)或 'middle'(中键)。

pyautogui.click(300, 400)  # 左键单击 (300, 400)
pyautogui.doubleClick(500, 600)  # 左键双击 (500, 600),等同于 pyautogui.click(500, 600, clicks=2)
pyautogui.rightClick(700, 800)  # 右键单击 (700, 800)

3.2 键盘操作

按键操作

press(key):模拟按下并快速释放一个按键,适用于单个按键操作,如 'enter'、'space'、'tab' 等。 

pyautogui.press('enter')  # 模拟按下回车键
pyautogui.press('space')  # 模拟按下空格键

keyDown(key) 和 keyUp(key):分别模拟按键按下和释放,常用于需要长按某个键的场景。例如,模拟按住 Shift 键输入大写字母。

pyautogui.keyDown('shift')
pyautogui.press('a')  # 输入大写字母 A
pyautogui.keyUp('shift')

输入文本

type(message, interval):模拟键盘输入文本,interval 设置每个字符之间的输入间隔时间,使输入更加平稳。

pyautogui.type('Hello, PyAutoGUI!', interval=0.1)  # 输入文本,字符间隔 0.1 秒

3.3 截图与图像识别 

截图

screenshot(imagePath):截取整个屏幕的截图,并保存到指定的文件路径。 

pyautogui.screenshot('screenshot.png')  # 截图并保存为 screenshot.png

screenshot(region=(left, top, width, height))`:截取指定区域的截图,`region` 参数定义了截图的左上角坐标、宽度和高度。

pyautogui.screenshot('region_screenshot.png', region=(100, 200, 300, 400))  # 截取指定区域的截图

图像识别

locateOnScreen(image, grayscale=False, confidence=None):在屏幕上查找与指定图像匹配的区域,返回一个元组,包含匹配区域的左上角坐标、宽度和高度。grayscale 参数可设置为 True 以加快查找速度,但可能降低准确性;confidence 参数用于设置匹配的置信度阈值(0 到 1 之间)。 

location = pyautogui.locateOnScreen('button.png', confidence=0.8)
if location:print('找到图像,位置为:', location)# 可以进一步获取中心坐标并点击center = pyautogui.center(location)pyautogui.click(center)
else:print('未找到图像')

4. 简单案例

假设我们要实现一个自动登录某网页的脚本。步骤如下:

  1. 打开浏览器并进入登录页面。

  2. 在用户名和密码输入框中输入相应内容。

  3. 点击登录按钮。

import pyautogui
import time# 打开浏览器并进入登录页面(假设已手动打开浏览器并定位到登录页面)
time.sleep(2)  # 等待页面加载# 输入用户名
pyautogui.click(500, 300)  # 点击用户名输入框(假设坐标为 (500, 300))
pyautogui.type('your_username')# 输入密码
pyautogui.click(500, 400)  # 点击密码输入框(假设坐标为 (500, 400))
pyautogui.type('your_password')# 点击登录按钮
pyautogui.click(500, 500)  # 点击登录按钮(假设坐标为 (500, 500))

5. 总结

PyAutoGUI 是一个功能强大且易于使用的 Python 库,它为我们提供了便捷的鼠标和键盘自动化操作功能,以及截图和图像识别能力。通过本文介绍的常见函数,我们能够在各种场景下实现自动化任务,提高工作效率。然而,在使用过程中,我们也需要注意一些细节,如准确获取坐标、合理设置操作间隔时间等,以确保脚本的稳定性和可靠性。我是橙色小博,关注我,一起在人工智能领域学习进步!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/83946.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在Windows本机安装Python并确保与Python.NET兼容

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

oracle数据恢复—oracle数据库执行truncate命令后的怎么恢复数据?

oracle数据库误执行truncate命令导致数据丢失是一种常见情况。通常情况下,oracle数据库误操作删除数据只需要通过备份恢复数据即可。也会碰到一些特殊情况,例如数据库备份无法使用或者还原报错等。下面和大家分享一例oracle数据库误执行truncate命令导致…

计算机二级Python考试的核心知识点总结

以下是计算机二级Python考试的核心知识点总结,结合高频考点和易错点分类整理: 1. **数据类型与运算** ▷ 不可变类型:int, float, str, tuple(重点区分list与tuple) ▷ 运算符优先级:** > * /…

Vue 组件库发布实战(含 TypeScript 支持)

整理不易,如果本文对你有帮助,欢迎点个【赞 👍】【收藏 ⭐】【关注 🧡】 📦Vue 组件库发布实战(含 TypeScript 支持) 在上一篇中我们完成了一个基础 Vue 3 组件的 npm 发布流程。本文将升级内容…

新版双紫擒龙、紫紫红黄、动能二号源码指标源码公式讲解

双紫擒龙量化指标公式源码,双紫擒龙紫紫红黄2025升级版的量化指标龙头模型............ 实战举例,量化擒龙------副图源码,如下: DIF:EMA(CLOSE,12)-EMA(CLOSE,26); DEA:EMA(DIF,9); ABC2:REF(CLOSE,1); ABC3:IF((CLOSE-ABC2…

c++中锁类型对比与实战

C++中的锁类型对比与实战:std::lock_guard、std::unique_lock、std::shared_lock 在多线程编程中,合理地使用锁是保证数据一致性和线程安全的关键。C++标准库提供了多种锁类型,每种都有其适用场景和性能特性。本文将深入分析 std::lock_guard、std::unique_lock、std::shar…

iview Switch Tabs TabPane 使用提示Maximum call stack size exceeded堆栈溢出

在vue项目中使用iview 框架部分组件时,直接引入使用报Maximum call stack size exceeded image.png 堆栈溢出 解决方案 更换组件名称就可以了 image.png 或 image.png 就可以了 猜测是因为和vue自己提供的组件名称一致了,重名问题导致的,具体…

初识结构体,整型提升及操作符的属性

目录 一、结构体成员访问操作符1.1 结构体二、操作符的属性:优先级、结合性2.1 优先级2.2 结合性C 运算符优先级 三、表达式求值3.1 整型提升3.2 算数转化 总结 一、结构体成员访问操作符 1.1 结构体 C语言已经提供了内置类型,如:char,shor…

JVM-内存结构

🧩 一、JVM内存五大核心结构详解 📌 1. 程序计数器(Program Counter Register) 特性说明作用记录当前线程执行的字节码行号指示器(分支/循环/异常处理的核心)线程私有✅ 每个线程独立存储指令位置异常❌ …

从 Revit 到 3DTiles:GISBox RVT 切片器如何让建筑图元在 Web 端展示

在GIS(地理信息系统)行业蓬勃发展的当下,数据处理与展示的效率和精准度成为关键。GISBox作为一款功能强大的一站式三维GIS数据编辑、转换、发布平台,凭借其独特的“RVT切片器”功能,在RVT图元处理方面也有着不俗的表现…

【Linux】为 Git 设置 Commit 提交模板方法,可统一个人或者项目的提交风格

为 Git 设置 Commit 提交模板 新建模板文件。注意之后不能删除该文件。 gedit ~/.gitmessage.txt粘贴自己的模板。可以给 AI 提自己的需求&#xff0c;定制一个模板&#xff0c;例如 # <type>(<scope>): <description> # # [optional body] # # [optional…

Android第十二次面试GetX库渲染机制

核心引擎&#xff1a;GetX / Obx 的魔法 .obs 是数据响应式化的关键操作&#xff0c;它将普通变量转换为可观察(Observable)对象&#xff1a; // 传统变量 - 无法自动通知更新 int count 0; // 响应式变量 - 自动通知能力 var count 0.obs; // RxInt(0) Obx 是 UI ​响应式…

用 Whisper 打破沉默:AI 语音技术如何重塑无障碍沟通方式?

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

ubuntu 添加应用到启动菜单

使用Alacarte菜单编辑器 Alacarte是一个简单易用的菜单编辑器&#xff0c;可以帮助用户添加、删除或编辑应用程序的启动菜单项。 安装Alacarte sudo apt-get install alacarte 执行alacarte alacarte 使用说明 选择新建项目进行添加 "Name"栏填自定义的名称&quo…

【学习笔记】构造函数+重载相关

【学习笔记】构造函数重载相关 一、构造函数 构造函数在创建对象的过程就会执行&#xff0c;带参数与不带参数&#xff0c;带参数的构造函数会默认将成员变量赋值传进去的参数。 class Layer { private:int layer_id; // 层IDstd::string layer_json; // 层的JSON配置…

6.6 计算机网络面试题

描述一下打开百度首页后发生的网络过程 网页非常慢转圈圈的时候&#xff0c;要定位问题需要从哪些角度&#xff1f; server a和server b&#xff0c;如何判断两个服务器正常连接&#xff1f;出错怎么办&#xff1f; 服务端正常启动了&#xff0c;但是客户端请求不到有哪些原因?…

Java -jar命令运行外部依赖JAR包的深度场景分析与实践指南

Java -jar命令运行外部依赖JAR包的深度场景分析与实践指南 引言&#xff1a;外部依赖JAR的必要性 在Java应用部署中&#xff0c;java -jar命令是启动可执行JAR包的标准方式。但当应用需要依赖外部JAR文件时&#xff08;如插件系统、模块化部署、共享库等场景&#xff09;&…

XHR / Fetch / Axios 请求的取消请求与请求重试

XHR / Fetch / Axios 请求的取消请求与请求重试是前端性能优化与稳定性处理的重点&#xff0c;也是面试高频内容。下面是这三种方式的详解封装方案&#xff08;可直接复用&#xff09;。 ✅ 一、Axios 取消请求与请求重试封装 1. 安装依赖&#xff08;可选&#xff0c;用于扩展…

2025最新Java日志框架深度解析:Log4j 2 vs Logback性能实测+企业级实战案例

一、为什么printStackTrace是"代码坟场"&#xff1f; 你写的日志可能正在拖垮系统&#xff01; 在Java开发中&#xff0c;直接调用printStackTrace()打印异常堆栈是最常见的"自杀式操作"。这种方式会导致三大致命问题&#xff1a; 无法分级控制&#xff…

前端面试四之Fetch API同步和异步

Fetch API&#xff08;Fetch Application Programming Interface&#xff09;是一个现代的、基于Promise的网络请求接口&#xff0c;用于在浏览器环境中发起网络请求并处理响应。它是对传统XMLHttpRequest的改进&#xff0c;提供了更简洁、灵活和强大的功能&#xff0c;广泛应用…