pyautogui — GUI 自动化工具,用于模拟键盘和鼠标事件。

PyAutoGUI — GUI 自动化工具,用于模拟键盘和鼠标事件

在日常工作中,很多重复性的操作可以通过自动化工具来完成,极大地提升效率。PyAutoGUI 是一个强大的 Python 库,它可以控制鼠标和键盘,模拟用户的交互行为,用于实现图形用户界面 (GUI) 自动化。


PyAutoGUI 简介

PyAutoGUI 是一个跨平台的 GUI 自动化工具,支持以下功能:

  • 模拟鼠标移动、点击、拖拽等操作。
  • 模拟键盘输入,包括按键和组合键。
  • 屏幕截图和图像识别。
  • 支持 Windows、macOS 和 Linux 系统。

安装 PyAutoGUI

使用 pip 安装 PyAutoGUI:

pip install pyautogui

检查安装是否成功:

python -c "import pyautogui; print(pyautogui.size())"

如果返回了当前屏幕的分辨率,说明安装成功。


基本功能

1. 获取屏幕大小

在执行鼠标移动或点击时,需要知道屏幕的分辨率:

import pyautogui# 获取屏幕的宽度和高度
screen_width, screen_height = pyautogui.size()
print(f"屏幕分辨率: {screen_width}x{screen_height}")

2. 鼠标操作

(1) 获取鼠标位置
# 获取当前鼠标的坐标
x, y = pyautogui.position()
print(f"当前鼠标位置: ({x}, {y})")
(2) 移动鼠标
# 移动鼠标到屏幕中央
pyautogui.moveTo(960, 540, duration=1)  # (x, y) 坐标, 移动时长
(3) 模拟鼠标点击
# 单击
pyautogui.click(960, 540)  # (x, y) 坐标# 双击
pyautogui.doubleClick()# 右击
pyautogui.rightClick()
(4) 鼠标拖拽
# 从 (100, 100) 拖拽到 (400, 400)
pyautogui.moveTo(100, 100)
pyautogui.dragTo(400, 400, duration=1)
(5) 鼠标滚动
# 向上滚动
pyautogui.scroll(500)# 向下滚动
pyautogui.scroll(-500)

3. 键盘操作

(1) 模拟输入文本
pyautogui.write("Hello, PyAutoGUI!", interval=0.1)  # 每个字符间隔 0.1 秒
(2) 模拟按键
# 按下并释放一个键
pyautogui.press("enter")# 模拟组合键
pyautogui.hotkey("ctrl", "s")  # 模拟 Ctrl + S
(3) 模拟按住和释放
pyautogui.keyDown("shift")   # 按住 Shift 键
pyautogui.press("a")         # 输入 'A'
pyautogui.keyUp("shift")     # 释放 Shift 键

4. 屏幕截图与图像识别

(1) 屏幕截图
# 截取整个屏幕
screenshot = pyautogui.screenshot()
screenshot.save("screenshot.png")  # 保存截图
(2) 图像识别

通过图像识别找到屏幕上的目标位置:

# 在屏幕上查找名为 "button.png" 的图像
location = pyautogui.locateOnScreen("button.png")if location:print(f"图像位置: {location}")pyautogui.click(location)  # 点击目标位置
else:print("未找到目标图像")

注意:图像识别依赖屏幕分辨率和图像匹配精度,可能需要调整。


高级功能

1. 自动化弹窗处理

# 模拟关闭弹窗
pyautogui.moveTo(1200, 10)  # 假设弹窗关闭按钮位于 (1200, 10)
pyautogui.click()

2. 安全触发

为了防止脚本失控,可以通过以下方法启用安全退出:

pyautogui.FAILSAFE = True  # 启用安全退出

当鼠标移动到屏幕左上角时,脚本会自动停止。


PyAutoGUI 的注意事项

  1. 屏幕分辨率一致性
    图像识别和鼠标操作需要确保运行环境的屏幕分辨率与开发环境一致,否则可能出现偏差。

  2. 适当的延迟
    在执行连续的操作时,建议加入适当的延迟,防止操作过快导致错误。

    pyautogui.PAUSE = 0.5  # 每次操作后暂停 0.5 秒
    
  3. 权限问题
    在 macOS 和某些 Linux 系统中,需要授予 PyAutoGUI 控制鼠标和键盘的权限。


应用场景

  1. 自动化测试
    模拟用户操作进行 GUI 测试,如点击按钮、输入表单等。

  2. 办公自动化
    自动化处理重复性任务,例如批量导入数据、生成报告。

  3. 游戏辅助
    模拟鼠标点击或键盘操作,实现简单的自动化游戏脚本。


示例项目:自动登录网站

以下示例演示如何使用 PyAutoGUI 自动登录一个网站:

import pyautogui
import time# 打开浏览器
pyautogui.press("win")  # 按下 Windows 键
pyautogui.write("chrome")  # 输入浏览器名称
pyautogui.press("enter")
time.sleep(2)# 输入网址
pyautogui.write("https://example.com/login")
pyautogui.press("enter")
time.sleep(3)# 输入用户名和密码
pyautogui.click(600, 400)  # 点击用户名输入框
pyautogui.write("your_username")pyautogui.click(600, 500)  # 点击密码输入框
pyautogui.write("your_password")# 点击登录按钮
pyautogui.click(650, 600)

总结

PyAutoGUI 是一个功能丰富且易于使用的工具,非常适合实现 GUI 自动化任务。通过它,你可以快速模拟用户操作,完成一系列复杂的任务。如果你对 PyAutoGUI 感兴趣,不妨尝试将其应用到你的工作或项目中,相信它会成为你开发工具箱中不可或缺的一部分。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

刚学php序列化/反序列化遇到的坑(攻防世界:Web_php_unserialize)

刚开始遇到题目的时候,思路还是很明确。 原题入口:攻防世界 (xctf.org.cn) 中的 Web_php_unserialize 两个函数 serialize() //将一个对象转换成一个字符串 unserialize() //将字符串还原成一个对象 首先看到 unserialize() 可以知道基本上能得…

5G 现网信令参数学习(3) - RrcSetup(2)

前一篇:5G 现网信令参数学习(3) - RrcSetup(1) 目录 1. rlf-TimersAndConstants 2. spCellConfigDedicated 2.1 initialDownlinkBWP 2.1.1 pdcch-Config 2.1.1.1 controlResourceSetToAddModList 2.1.1.2 searchSpacesToAddModList 2.1.2 pdsch-Config 2.1…

在windows上打包mediasoup arm64版本的docker镜像

mediasoup版本:3.14.14 mediasoup-demo版本:v3 windows 10 专业版 docker-desktop版本:4.30.0 (149282) docker info: Client:Version: 26.1.1Plugins:buildx: Docker Buildx (Docker Inc.)Version: v0.14.0-desktop.1Path: C:\Prog…

11.19机器学习_逻辑回归

十二 逻辑回归 1.概念 逻辑回归(Logistic Regression)是机器学习中的一种分类模型,逻辑回归是一种分类算法,虽然名字中带有回归,但是它与回归之间有一定的联系。由于算法的简单和高效,在实际中应用非常广泛。 逻辑回归一般用于…

【LLM训练系列01】Qlora如何加载、训练、合并大模型

示例1:Qlora训练Qwen2.5 参考脚本:https://github.com/QwenLM/Qwen/blob/main/recipes/finetune/deepspeed/finetune_qlora_multi_gpu.ipynb 训练命令如下: !torchrun --nproc_per_node 2 --nnodes 1 --node_rank 0 --master_addr localho…

Jmeter数据库压测之达梦数据库的配置方法

目录 1、概述 2、测试环境 3、数据库压测配置 3.1 安装jmeter 3.2 选择语言 3.3 新建测试计划 3.4 配置JDBC连接池 3.5 配置线程组 3.6 配置测试报告 3.7 执行测试 1、概述 Jmeter是Apache组织开发的基于Java的压力测试工具,用于对软件做压力测试。 它最…

[ 应急响应进阶篇-1 ] Windows 创建后门并进行应急处置-5:启动项后门

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

编译报错:protoc did not exit cleanly. Review output for more information.

目录标题 解决“protoc did not exit cleanly”的报错问题检查.proto文件的语法 解决“protoc did not exit cleanly”的报错问题 今天做的项目需要用到grpc,然后需要编写proto然后编译后实现grpc的具体方法! 结果编译的时候报了protoc did not exit cl…

Java码农人生开启手册——重载和重写

一、重载 有时在调用现有方法时会出现参数类型不匹配的问题,在Java中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了。 注意: 方法名必须相同参数列表必须不同与返回值是否相同无关编译器在编译代码时&…

ComfyUI-unclip模型部署指南

一、介绍 unCLIP 模型是 SD 模型的版本,经过专门调整,除了文本提示之外,还可以接收图像概念作为输入。使用这些模型附带的 CLIPVision 对图像进行编码,然后在采样时将其提取的概念传递给主模型。 它并不是按照传统意义将图像混合…

优雅关闭:避免服务停机带来的业务损失

服务关闭有什么问题? 在“单体应用”复杂到一定程度后,一般会进行系统拆分,也就是微服务架构。服务拆分之后,就需要协同,于是RPC框架就出来了,用来解决各个子系统之间的通信问题。 拆分系统的目的&#x…

硬件知识 cadence16.6 原理图输出为pdf 网络名下划线偏移 (ORCAD)

1. cadence原理图输出为PDF网络名下划线偏移 生这种情况的原因 1. 设计的原理图图纸大小比正常的 A4图纸大。 2. 打印为PDF 的时候,打印机的设置有问题。 2.cadence原理图输出为 PDF网络名下划线偏移的情况 可以看到上图,网络名往上漂移。 3. 解决办法 …

Linux插件zsh(oh-my-zsh)

一、oh-my-zsh基本介绍 oh-my-zsh: https://github.com/ohmyzsh/ohmyzshhttps://github.com/ohmyzsh/ohmyzsh 注意:需要先安装zsh命令,才能安装oh-my-zsh,先测试是否安装了zsh rootserver:/opt # zsh --version zsh 5.8 (x86_6…

异或和之和

//暴力做法 枚举每个子区间 O(n^3) //优化1 利用前缀异或和快速求出区间异或和 O(n^2) //优化2 处理位运算的常用方法:拆位法 常用的思想:贡献法思想 下面详见优化2: 1.拆位贡献法 2.实战真题1 题目链接:1.异或和之和 - 蓝桥…

A039-基于SpringBoot的农产品销售系统的设计与实现

🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…

【大数据学习 | Spark】RDD的概念与Spark任务的执行流程

1. RDD的设计背景 在实际应用中,存在许多迭代式计算,这些应用场景的共同之处是,不同计算阶段之间会重用中间结果,即一个阶段的输出结果会作为下一个阶段的输入。但是,目前的MapReduce框架都是把中间结果写入到HDFS中&…

jmeter操作数据库

简介 Apache JMeter 是一个强大的开源工具,用于负载测试和性能测量。除了Web应用外,JMeter还可以用于测试各种数据库系统,包括MySQL。本文将详细介绍如何使用JMeter来测试MySQL数据库的性能。 环境准备 安装Java:确保你已经安装…

最小生成树——Kruskal、Prim算法

图的存储: 高阶数据结构——图 文章目录 目录 文章目录 一、kruskal算法 二、Prim算法 前言 连通图中的每一棵生成树,都是原图的一个极大无环子图,即:从其中删去任何一条边,生成树 就不在连通;反之&#xf…

STL-stack栈:P1981 [NOIP2013 普及组] 表达式求值

这个题用的STL-栈来做 题目来源:洛谷 相关知识 [NOIP2013 普及组] 表达式求值 题目背景 NOIP2013 普及组 T2 题目描述 给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。 输入格式 一行,为需要你计算的表达式&#xff…

数字孪生赋能智慧校园:构建全方位校园安全保障新体系

在11月19日最高人民检察院的党组会上,校园安全问题再次被置于重要议程,会议明确指出,校园安全不仅关乎学生的健康成长,更与社会和谐稳定紧密相连。面对侵害学生权益、危害校园安全的犯罪行为,必须采取“零容忍”态度&a…