[Python] Python自动化:PyAutoGUI的基本操作

article/2025/8/12 2:59:46

初次学习,如有错误还请指正

目录

PyAutoGUI介绍

PyAutoGUI安装

鼠标相关操作

鼠标移动

鼠标偏移

获取屏幕分辨率

获取鼠标位置

案例:实时获取鼠标位置

鼠标点击

左键单击

点击次数

多次有时间间隔的点击

右键/中键点击

移动时间

总结

鼠标的按下、抬起

鼠标滑轮滑动

键盘相关操作

键盘输入

中文输入

按键输入

组合按键

按键的按住和抬起

截取屏幕图像

消息框和输入框


PyAutoGUI介绍

PyAutoGUI 是一个用于自动化鼠标和键盘操作的 Python 模块,能够轻松实现 GUI 自动化任务。它支持多种操作系统(Windows、macOS 和 Linux),并且兼容 Python 2 和 Python 3

PyAutoGUI安装

在命令行窗口或打开pycharm的终端,输入:

pip install pyautogui

之后使用的时候直接导入包即可:

import pyautogui

鼠标相关操作

鼠标移动

基于屏幕分辨率让鼠标移动到一个坐标位置(按照分辨率来计算)

# 参数:x y
pyautogui.moveTo(100,100)

运行后会发现鼠标立刻被移动到了靠近左上角的位置。若要移动到最左上角则将x和y值都改为0即可。

注意:x值和y值不能超出你目前电脑的分辨率范围(也不能正好和屏幕分辨率相同),否则会报错。 例如你的电脑屏幕分辨率为1920*1080。你想要将鼠标移动到右下角时,若将x值设为1920,y值设为1080,此时会报错。只能将x设为1919,y设为1079才行。 也就是说坐标值最小写0,最大写到分辨率-1.

除此之外还可以规定鼠标花多少时间来移动到这个位置,只需要在坐标后加上时间参数即可:

pyautogui.moveTo(100,100,1)

运行后发现鼠标用了一秒来慢慢移动到规定位置,并且能显示出移动的轨迹,而不像之前一样瞬间到达。

鼠标偏移

基于目前鼠标的位置进行移动

#参数 x y
pyautogui.move(100,100)

其中,当x为正值时,鼠标向右移动。x为负值时,鼠标向左移动。当y为正值时,鼠标向下移动。y为负值时,鼠标向上移动。

注意:当前鼠标位置偏移后不能超过屏幕分辨率,否则会报错。 其次,当前鼠标的位置不能是(0,0),否则也会报错。

同样,鼠标偏移也可以加上时间参数

pyautogui.move(100,100,1)

获取屏幕分辨率

pyautogui.size()

#获取屏幕分辨率
print(pyautogui.size())

获取鼠标位置

pyautogui.position()

print(pyautogui.position())

案例:实时获取鼠标位置

#获取初始鼠标位置
x,y = pyautogui.position()
while True:#接受鼠标变动位置x1,y1 = pyautogui.position()#如果初始位置和变动后的位置不同,则输出最新的位置if x1 != x or y1 != y:x,y = x1,y1print(x,y)

此时控制台会一直输出鼠标的位置:

鼠标点击

左键单击

import pyautogui
import time
#先移动
pyautogui.moveTo(1299,61)
#添加等待时间以防止因为系统卡顿原因而导致漏指令
time.sleep(1)
#鼠标点击(默认左键点击)
pyautogui.click()#也可以合并上面的移动和点击语句,直接给点击方法中传参
pyautogui.click(1299,61)

我这里的位置时能够点击pycharm左侧的项目栏按钮:

执行前:

执行后:

可以看到左侧的项目栏被点击收起了

点击次数

click方法中除了可以传位置参数,还可以传点击次数(clicks)的参数,位于位置参数后。

#双击
pyautogui.click(1299,61,2)

多次有时间间隔的点击

要实现多次有时间间隔的点击,则需要在点击次数参数后,再添加点击间隔(interval)参数

#在(1299,61)位置,点击两下,每次点击间隔1秒
pyautogui.click(1299,61,2,1) 

右键/中键点击

要实现右键或中键点击,则需要在点击间隔参数后再添加按键(button)参数

#在(1299,61)位置,右键点击两下,每次点击间隔1秒
pyautogui.click(1299,61,2,1,'right') 
#中键为middle

移动时间

在button参数后添加移动时间(duration)参数即可

pyautogui.click(1299,61,2,1,'right',1)

总结

click()方法共有六个参数:

  • 位置1 x=坐标值

  • 位置2 y=坐标值

  • 位置3 clicks=点击次数

  • 位置4 interval=点击间隔时间

  • 位置5 button=右键right,中键middle

  • 位置6 duration=鼠标移动时间

  • 如果需要直接使用后面的参数也可以直接在括号内输入对应的方法加=号

  • pyautogui.click(button='left')

鼠标的按下、抬起

#方法1
pyautogui.moveTo(1410,461,1)
#鼠标按下(默认为左键)
pyautogui.mouseDown()
pyautogui.moveTo(1678,679,1)
#鼠标抬起
pyautogui.mouseUp()#方法2

执行前:

执行后:

也可在位置参数后添加按键参数:

如果在按下中添加了右键或中键为参数,那么在抬起时也要添加该参数,否则抬起时依然会默认抬起左键

pyautogui.mouseDown(1410,461,'right')
pyautogui.mouseUp(button='right')

鼠标滑轮滑动

正数向上滑动,负数向下滑动

pyautogui.scroll(200)

键盘相关操作

键盘输入

pyautogui.write('12345abc')

注意:该语句不支持直接输出中文 虽然可以切换成中文输入法,按照拼音顺序来执行,但是比较鸡肋,更好的方法可以参考下一节的中文输入。

如果需要间隔一段时间再输入可以在后面加上间隔时间参数:

pyautogui.write('12345abc',0.2)

中文输入

PyAutoGUI 本身不支持直接输入中文,但可以通过调用 pyperclip 模块将需要输入的中文复制到剪贴板中,然后使用 pyautogui 模拟 Ctrl+V 粘贴操作来实现。

首先需要在终端输入下面的命令来安装第三方库

pip install pyperclip

之后导入包即可使用

import pyperclip
a1 = "我要输入中文"
pyperclip.copy(a1)
pyautogui.hotkey('ctrl','v')#也可以用数组来随机输出数组内的中文
import pyperclip
import random
a1 = ["我要输入中文","我要输入英文","我要输入日文"]
a2 = random.randint(0,2)
pyperclip.copy(a1[a2])
pyautogui.hotkey('ctrl','v')

按键输入

如果要输入回车、删除,则需要按键输入

#按下回车
pyautogui.press('enter')
#按下f5
pyautogui.press('f5')

如果需要多次输入按键或是要间隔时间输入,就需要在后面添加上对应的参数。

#按下两次enter,每次间隔1秒
#参数:(keys,presses,interval)
pyautogui.press('enter',2,1)

组合按键

可以输入快捷键组合

#输入ctrl+v黏贴
pyautogui.hotkey('ctrl','v')

按键的按住和抬起

#输入一个大写S和小写s
pyautogui.keyDown('shift')
pyautogui.press('s')
pyautogui.keyUp('shift')
pyautogui.press('s')

截取屏幕图像

首先安装第三方库Pillow

pip install pillow

获取并保存截图

#第一个参数:保存的位置(默认为当前项目的目录下)
pyautogui.screenshot('1.png')
#上面这个是全屏截取
#下面为范围截取,括号内前两个参数为起始的x轴和y轴,后两个为结束的x轴和y轴
pyautogui.screenshot('2.png',(1410,461,1510,561))

执行前:

执行后:

消息框和输入框

  • 消息框
#参数:(内容,标题,按钮文字)
pyautogui.alert('hello','提示','ok')
#如果不改变按钮文字,则会调用windows原生的样式
pyautogui.alert('hello','提示')

  • 输入框
#参数(内容,标题,默认输入值)
a1 = pyautogui.prompt('显示内容','标题','请在此处输入内容')
print(a1)

输入123123:

消息框还可用于代码的暂停功能,在用户没有点击确定之前,后续的代码不会执行。


THE END         

如有遗漏,欢迎补充,感谢!


http://www.hkcw.cn/article/wlXJnfMZtM.shtml

相关文章

【Hot 100】45. 跳跃游戏 II

目录 引言跳跃游戏 IIdp解题贪心解题 🙋‍♂️ 作者:海码007📜 专栏:算法专栏💥 标题:【Hot 100】45. 跳跃游戏 II❣️ 寄语:书到用时方恨少,事非经过不知难! 引言 跳跃…

QT-JSON

#include <QJsonDocument>#include <QJsonObject>#include <QJsonArray>#include <QFile>#include <QDebug>void createJsonFile() {// 创建一个JSON对象 键值对QJsonObject jsonObj;jsonObj["name"] "John Doe";jsonObj[…

blender 手柄驱动开发-ubuntu

ubuntu 如何安装blender 官网blender.org下载tar.xz压缩文件 tar -xvf xxx.tar.xz如何启动blender,命令行输入&#xff1a; blender 如何在blender中安装pygame模块 需要找到blender中的python解释器路径import sys print(sys.executable)然后在终端terminal中使用以下命令 $ …

(9)-Fiddler抓包-Fiddler如何设置捕获Https会话

1.简介 由于近几年来各大网站越来越注重安全性都改成了https协议&#xff0c;不像前十几年前直接是http协议直接裸奔在互联网。接着讲解如何抓取https协议会话。 2.什么是HTTPS&#xff1f; HTTPS就是加过密的HTTP。使用HTTPS后&#xff0c;浏览器客户端和Web服务器传输的数…

差分隐私技术的有效性和局限性

差分隐私&#xff08;Differential Privacy, DP&#xff09;由计算机科学家Cynthia Dwork于 2006 年提出&#xff0c;其核心思想是&#xff1a;通过向数据中添加精心设计的随机噪声&#xff0c;确保单个个体的加入或删除不会显著改变数据分析结果的分布&#xff0c;从而从数学上…

篇章七 数据结构——栈和队列

目录 1. 栈(Stack) 1.1 概念 1.图示栈概念&#xff1a; 2.栈在现实生活中的例子&#xff1a; 1.2 栈的使用 1.3 栈的模拟实现 1.接口 2.数组实现 1.4 栈的应用场景 1. 改变元素的序列 2.单链表是否可以实现栈&#xff1f; 2.1 数组实现&#xff1a;顺序栈 2.2 链…

LM393红外避障电路Multisim仿真

电路分析&#xff1a; 开关S1模拟物体的靠近&#xff0c;当按键按下时&#xff0c;表示有物体靠近。 当没有检测到物体时&#xff08;按键没有按下&#xff09;&#xff0c;LM393D的同相端被R2拉高&#xff0c;电压为5V。 此时反相端的电压经过两个电阻分压后&#xff0c;电压…

C语言进阶--文件操作

1.为什么使用文件&#xff1f; 使用文件可以将数据直接存放在电脑的硬盘上&#xff0c;做到了数据的持久化。 2.什么是文件&#xff1f; 硬盘上的文件都是文件。但是在程序化设计中&#xff0c;我们一般谈到的文件有两种&#xff1a;程序文件、数据文件&#xff08;从文件功…

力扣刷题Day 66:分割回文串(131)

1.题目描述 2.思路 用了回溯的方法。首先写一个验证字符串是否是回文串的函数&#xff0c;然后遍历s&#xff0c;依次判断从当前字符到下一字符是否是回文串&#xff0c;是的话继续往后走&#xff0c;不是的话往回退。 3.代码&#xff08;Python3&#xff09; class Solutio…

【IC】多角多模式信号完整性优化

随着互连效应增强和时钟频率加快&#xff0c;串扰噪声、毛刺和意外信号延迟的发生概率也随之增加&#xff0c;信号完整性 (SI) 问题也日益凸显。由于 65 纳米和 45 纳米设计中横向导线电容的影响日益增大&#xff0c;与 SI 相关的时序违规显著增多。设计必须运行的操作模式和工…

2,QT-Creator工具创建新项目教程

目录 1,创建一个新项目 demo_01.pro(项目配置文件) 类似 CMakeList.txt widget.h(头文件)​ main.cpp(程序入口)​ widget.cpp(源文件)​ widget.ui(界面设计文件)​ 1,创建一个新项目 依次选择: 设置路径: 选择编译器: 如果选择CMake, 就会生成cmakel…

【RocketMQ 生产者和消费者】- 生产者发送同步、异步、单向消息源码分析(1)

文章目录 1. 前言2. send 方法发送同步消息3. sendDefaultImpl 发送消息4. sendKernelImpl 发送同步、异步、单向消息5. sendMessage 发送消息6. 同步发送 sendMessageSync6.1 invokeSyncImpl 同步调用 7. 异步发送 sendMessageAsync7.1 invokeAsyncImpl 异步调用 8. 单向发送 …

【harbor】--配置https

使用自建的 CA 证书来自签署和启用 HTTPS 通信。 &#xff08;1&#xff09;生成 CA认证 使用 OpenSSL 生成一个 2048位的私钥这是 自建 CA&#xff08;证书颁发机构&#xff09; 的私钥&#xff0c;后续会用它来签发证书。 # 1创建CA认证 cd 到harbor [rootlocalhost harbo…

SOC-ESP32S3部分:23-文件系统

飞书文档https://x509p6c8to.feishu.cn/wiki/SXf5w6seIijVVskvic5cNT2wng4 目前&#xff0c;ESP-IDF 框架支持三种文件系统。 SPIFFS&#xff08;SPI Flash File System&#xff09; 简介&#xff1a;SPIFFS 是专门为 SPI NOR Flash 设备设计的轻量级文件系统&#xff0c;适…

[Godot] 如何导出安卓 APK 并在手机上调试

在之前的文章中&#xff0c;我们已经详细介绍了如何配置 Godot 的安卓应用开发环境&#xff0c;包括安装 Android SDK、配置 Java 环境、设置 Godot 的 Android 导出模板等。本篇文章将进一步讲解如何将 Godot 项目导出为安卓 APK 文件&#xff0c;并实现在手机上进行调试运行。…

通用人工智能 (AGI): 定义、挑战与未来展望

摘要 通用人工智能 (AGI) 代表人工智能领域的理想追求&#xff0c;其目标是创造具备人类般广泛智能能力的系统。本文深入探讨 AGI 的核心概念&#xff0c;详细梳理通向 AGI 的潜在技术路径&#xff0c;同时分析实现过程中面临的挑战与应对策略&#xff0c;并对 AGI 的未来发展进…

【CF】Day72——Codeforces Round 890 (Div. 2) CDE1 (二分答案 | 交互 + 分治 | ⭐树上背包)

C. To Become Max 题目&#xff1a; 思路&#xff1a; 二分挺好想的&#xff0c;但是check有点不好写 看到最大值&#xff0c;试试二分&#xff0c;如果 x 可以&#xff0c;那么 x - 1 肯定也可以&#xff0c;所以具有单调性&#xff0c;考虑二分 如何check呢&#xff1f;由于…

Java进阶---JVM

JVM概述 JVM作用&#xff1a; 负责将字节码翻译为机器码&#xff0c;管理运行时内存 JVM整体组成部分&#xff1a; 类加载系统(ClasLoader)&#xff1a;负责将硬盘上的字节码文件加载到内存中 运行时数据区(RuntimeData Area)&#xff1a;负责存储运行时各种数据 执行引擎(Ex…

Linux《文件系统》

在之前的系统IO当中已经了解了“内存”级别的文件操作&#xff0c;了解了文件描述符、重定向、缓冲区等概念&#xff0c;在了解了这些的知识之后还封装出了我们自己的libc库。接下来在本篇当中将会将视角从内存转向磁盘&#xff0c;研究文件在内存当中是如何进行存储的&#xf…

SRD-12VDC-SL-C 继电器‌接线图解

这个继电器可以使用12伏的直流电源控制250伏和125伏的交流电&#xff0c;也可以控制30伏和28伏的直流电&#xff0c;电流都为10安。 此继电器有5个引脚&#xff0c;各个的作用如下&#xff1a; 引脚4和引脚5为触点&#xff0c; 引脚1和引脚3为线圈引脚&#xff0c;接12伏的直…