详细分析Python中的Pyautogui库(附Demo)

目录

  • 前言
  • 1. 基本知识
  • 2. 常用方法
    • 2.1 通用方法
    • 2.2 鼠标操作
    • 2.3 消息窗口
    • 2.4 截图

前言

该博客主要以入门了解其函数为主,灵活运用,后续会出一些实战结合类!

1. 基本知识

PyAutoGUI 是 Python 的一个库,用于实现自动化的图形用户界面 (GUI) 操作

允许编写 Python 脚本来控制鼠标、键盘和屏幕,从而实现自动化任务,如自动化测试、模拟用户交互、批量处理等

主要概念和作用:

  • 自动化操作:PyAutoGUI 允许编写脚本来模拟用户对键盘、鼠标和屏幕的操作,例如点击、拖动、键盘输入等

  • 跨平台:PyAutoGUI 可在 Windows、macOS 和 Linux 等操作系统上运行,因此编写一次脚本,可以在不同的平台上运行它

  • GUI 交互:PyAutoGUI 不需要直接访问应用程序的代码或 API,而是通过模拟用户的实际操作与 GUI 进行交互

  • 屏幕控制:PyAutoGUI 允许捕获屏幕区域的图像、获取屏幕分辨率等

2. 常用方法

2.1 通用方法

常用方法具体描述返回值
pyautogui.size()获取当前屏幕的大小返回一个元组,包含屏幕的宽度和高度
pyautogui.position()获取当前鼠标的位置返回一个包含当前鼠标位置的元组,格式为(x,y)
pyautogui.onScreen(x, y)检查指定坐标是否在屏幕内如果指定坐标在屏幕内,返回 True;否则返回 False

2.2 鼠标操作

演示如何使用pyautogui库来进行鼠标控制,主要包括以下内容:

  • 屏幕探测与定位:通过pyautogui.size()获取屏幕尺寸,然后利用pyautogui.moveTo()移动鼠标到指定位置。

  • 鼠标点击操作:使用pyautogui.click()函数进行鼠标点击操作,包括左键、右键以及连续点击。

  • 鼠标移动操作:通过pyautogui.moveRel()函数进行相对移动,或者pyautogui.dragTo()pyautogui.dragRel()进行拖拽操作。

  • 鼠标滚轮操作:使用pyautogui.scroll()函数进行鼠标滚轮滚动。

  • 等待操作:通过time.sleep()函数进行等待,以便在需要时暂停脚本的执行。

import pyautogui
import time

# 获取屏幕大小
screen_width, screen_height = pyautogui.size()

# 将鼠标移动到屏幕右下角
pyautogui.moveTo(screen_width, screen_height, duration=1)

# 相对移动鼠标
pyautogui.moveRel(-200, -200, duration=0.5)

# 在屏幕右下角点击鼠标左键
pyautogui.click(screen_width, screen_height, duration=0.5)

# 右键点击
pyautogui.click(button='right')

# 连续点击
pyautogui.click(screen_width / 2, screen_height / 2, clicks=3, interval=0.1, duration=0.5)

# 带右键的连续点击
pyautogui.click(screen_width / 2, screen_height / 2, clicks=2, interval=0.5, button='right', duration=0.2)

# 鼠标滚轮滚动
pyautogui.scroll(2)

# 在屏幕中心滚动鼠标滚轮
pyautogui.scroll(-10, screen_width / 2, screen_height / 2)

# 拖动鼠标到屏幕左上角
pyautogui.dragTo(0, 0, duration=0.5)

# 相对拖动鼠标
pyautogui.dragRel(100, 100, duration=0.5, button='right')

# 等待5秒
time.sleep(5)

如果想要执行一个Demo,对应可体验方知函数效果:

import pyautogui
import time

# 获取屏幕大小
screen_width, screen_height = pyautogui.size()

# 将鼠标移动到屏幕右下角
pyautogui.moveTo(screen_width, screen_height, duration=1)

# 等待1秒
time.sleep(1)

# 在屏幕中心点击鼠标左键
pyautogui.click(screen_width / 2, screen_height / 2, duration=0.5)

# 等待1秒
time.sleep(1)

# 右键点击
pyautogui.click(button='right')

# 等待1秒
time.sleep(1)

# 在屏幕左上角点击鼠标左键
pyautogui.click(0, 0, duration=0.5)

# 等待1秒
time.sleep(1)

# 连续点击
pyautogui.click(screen_width / 2, screen_height / 2, clicks=3, interval=0.1, duration=0.5)

# 等待1秒
time.sleep(1)

# 拖动鼠标到屏幕右上角
pyautogui.dragTo(screen_width, 0, duration=0.5)

# 等待1秒
time.sleep(1)

# 鼠标滚轮滚动
pyautogui.scroll(2)

# 等待1秒
time.sleep(1)

# 拖动鼠标到屏幕中心
pyautogui.dragTo(screen_width / 2, screen_height / 2, duration=0.5)

# 等待1秒
time.sleep(1)

# 拖动鼠标到屏幕右下角
pyautogui.dragTo(screen_width, screen_height, duration=0.5)

# 等待1秒
time.sleep(1)

# 拖动鼠标到屏幕左下角
pyautogui.dragTo(0, screen_height, duration=0.5)

# 等待1秒
time.sleep(1)

# 退出程序
print("Demo 执行完毕!")

以下是对PyAutoGUI库中几个常用函数的示例及说明:

  • pyautogui.press('a'):模拟按下键盘上的单个按键,这里是按下键盘上的字母’a’。

  • pyautogui.press(['p','y','space'], interval=0.1):模拟按下多个按键,这里是按下’p’、'y’和空格键,按键之间的间隔设置为0.1秒。

  • pyautogui.typewrite('hello, PyAutoGUI!\n'):模拟键盘输入字符串,这里输入字符串"hello, PyAutoGUI!“,并在末尾添加换行符”\n"。

  • pyautogui.typewrite(['s','r','f','space'], interval=0.1):模拟按下多个按键,设置了按键之间的间隔为0.1秒。

  • pyautogui.typewrite(['capslock','p','y']):模拟按下多个按键,这里是按下Caps Lock键,然后输入’p’和’y’。

  • pyautogui.hotkey('ctrl', 'shift', 'esc'):模拟按下组合键,这里是同时按下Ctrl、Shift和Esc键,用来调出任务管理器。

  • pyautogui.hotkey('alt','ctrl','delete'):模拟按下组合键,这里是同时按下Alt、Ctrl和Delete键,用来调出特定的系统操作,例如重启或锁定屏幕等。

以上示例展示了PyAutoGUI库中常用的几个函数,可以用来模拟键盘操作。

2.3 消息窗口

以下是补充完善的示例,包括使用pyautogui.alert()pyautogui.confirm()pyautogui.prompt()pyautogui.password()函数,以及一个执行这些函数的完整演示示例:

import pyautogui

# 弹出警告消息框
pyautogui.alert(text='这是一个警告消息框', title='PyAutoGUI消息框', button='OK')

# 弹出确认消息框
result_confirm = pyautogui.confirm(text='请选择一个选项', title='PyAutoGUI消息框', buttons=['1', '2', '3'])
print('你选择了:', result_confirm)

# 弹出输入提示框
user_input = pyautogui.prompt(text='请输入你的名字', title='PyAutoGUI消息框', default='匿名用户')
print('你输入的名字是:', user_input)

# 弹出密码输入框
password_input = pyautogui.password(text='请输入密码', title='PyAutoGUI消息框', default='', mask='*')
print('你输入的密码是:', password_input)

警告消息框:

在这里插入图片描述

弹出确认消息框:

在这里插入图片描述

弹出输入提示框:

在这里插入图片描述

弹出密码输入框:

在这里插入图片描述

最终也可看到终端输出如下:

在这里插入图片描述

2.4 截图

pyautogui.screenshot()函数用于在屏幕上指定区域进行截图,并保存为图像文件

参数region指定了截图的区域,其格式为元组 (left, top, width, height),分别表示左上角的 x、y 坐标以及区域的宽度和高度

以下是一个可以执行的示例演示:

import pyautogui

# 获取屏幕分辨率
screen_width, screen_height = pyautogui.size()

# 设置截图区域(假设要截取屏幕右下角的 600x400 区域)
region_left = screen_width - 600
region_top = screen_height - 400
region_width = 600
region_height = 400

# 截取屏幕指定区域并保存为图像文件
pyautogui.screenshot('shot.png', region=(region_left, region_top, region_width, region_height))

print("截图已保存为 'shot.png'")

找到项目的路径,其截图如下:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

信号系统之连续信号处理

1 Delta 函数 连续信号可以分解为缩放和移位的增量函数,就像处理离散信号一样。不同之处在于,连续 delta 函数比其离散函数复杂得多,在数学上也抽象得多。我们不是用它是什么来定义连续 delta 函数,而是用它所具有的特征来定义它…

【眼科大模型】Ophtha-LLaMA2:视觉模型提取图像特征 + LLM基于特征生成眼底病变的诊断报告

Ophtha-LLaMA2:视觉模型提取图像特征 LLM基于特征生成眼底病变的诊断报告 提出背景设计思路选择大模型基座生成诊断报告 论文:https://arxiv.org/pdf/2312.04906.pdf 提出背景 目标是开发一个全面的眼科模型,可以根据不同仪器的检查报告准确…

GitHub | 在 GitHub 上在线展示 Vue 项目

简洁版&#xff1a;上传所有代码 << 构建项目并上传 dist 目录 << 设置仓库 << 访问 Step1&#xff1a;在 GitHub 上新建仓库&#xff0c;并将 Vue 项目的代码 push 到该仓库中。坑点在于&#xff0c;如果你是从 GitHub 上 clone 的别人的项目&#xff0c;那…

vulnhub练习 DC-1复现及分析

一、搭建环境 1.工具 靶机&#xff1a;DC-1 192.168.200.17 攻击机&#xff1a;kali 192.168.200.13 2.注意 攻击机和靶机的网络连接方式要相同&#xff0c;另外DC-1的网络连接方式我这里采用NAT模式&#xff0c;是与kali的网络连接模式相同的&#xff08;当然亦可以选用桥…

国产chat gpt推荐

下述网站响应非常快 会持续更新的! 付费&#xff1a; 小名言 免费&#xff1a; AIchatOS 百度的文心一言

unity学习(32)——跳转到角色选择界面(父子类问题)

新问题 应该是两个脚本之间缺少继承关系 its children 解决起来很简单&#xff0c;把ResceneScript也绑到canvas上就可以了 。 此时&#xff0c;在账号密码正确的情况下&#xff0c;是可以完成场景切换。 对应的代码如下&#xff1a; TMP_Text d GameObject.FindWithTag(&…

板块一 Servlet编程:第五节 Cookie对象全解 来自【汤米尼克的JAVAEE全套教程专栏】

板块一 Servlet编程&#xff1a;第五节 Cookie对象全解 一、什么是CookieCookie的源码 二、Cookie的具体操作&#xff08;1&#xff09;创建Cookie&#xff08;2&#xff09;获取Cookie&#xff08;3&#xff09;设置Cookie的到期时间&#xff08;4&#xff09;设置Cookie的路径…

<网络安全>《42 网络攻防专业课<第八课 - SQL注入漏洞攻击与防范>》

1 SQL注入漏洞利用及防范 1 SQL注入的地位 2 SQL注入的危害及本质 这些危害包括但不局限于&#xff1a; 数据库信息泄漏&#xff1a;数据库中存放的用户的隐私信息的泄露。网页篡改&#xff1a;通过操作数据库对特定网页进行篡改。网站被挂马&#xff0c;传播恶意软件&#…

writing classes ... [xxx of xxxx] 执行时间太长

一、问题展示 二、解决方法 打开设置【File - Settings…】修改堆大小

OpenGL学习——16.多光源

前情提要&#xff1a;本文代码源自Github上的学习文档“LearnOpenGL”&#xff0c;我仅在源码的基础上加上中文注释。本文章不以该学习文档做任何商业盈利活动&#xff0c;一切著作权归原作者所有&#xff0c;本文仅供学习交流&#xff0c;如有侵权&#xff0c;请联系我删除。L…

MySQL 窗口函数温故知新

本文用于复习数据库窗口函数&#xff0c;希望能够温故知新&#xff0c;也希望读到这篇文章的有所收获。 本文以&#xff1a;MySQL为例 参考文档&#xff1a; https://www.begtut.com/mysql/mysql-window-functions.html 使用的样例数据&#xff1a;https://www.begtut.com/m…

Linux|centos7| rust语言的编译开发环境快速部署

前言&#xff1a; rust语言是干什么的&#xff0c;怎么用这些我就不在这里废话了&#xff0c;免得浪费大家的时间&#xff0c;我目前只知道rust音译为铁锈&#xff0c;它的可执行主程序叫cargo&#xff0c;音译为货物 这个语言和python&#xff0c;Java&#xff0c;go等等语言…

每日学习总结20240220

每日总结 20240220 岁月极美&#xff0c;在于它必然的流逝&#xff1b;春花&#xff0c;秋月&#xff0c;夏日&#xff0c;冬雪。 ——三毛 1.svn操作 通过svn创建一个仓库 请写出一套配置 配置文件包括svnserve.conf passwd authz 三个文件 添加用户xiaoming 密码为lx,使得能…

LabVIEW读取excel日期

LabVIEW读取excel日期 | Excel数据表格中有日期列和时间列&#xff0c;如下表所示&#xff1a; 通过LabVIEW直接读取Excel表格数据&#xff0c;读出的日期列和时间列数据与原始表格不一致&#xff0c;直接读出来的数据如下表所示&#xff1a; 日期、时间列数据异常 问题产生原因…

三次握手,四次挥手的大白话版本

三握四挥 首先我们要知道握手和挥手是在做什么&#xff0c;握手是为了让客户端和服务端建立连接&#xff0c;挥手是为了让客户端和服务端断开连接&#xff0c;握手时客户端主动发起请求&#xff0c;挥手双方都能发起请求。 三次握手 有必要解释一下&#xff0c;SYN的意思是同…

OLED示例程序、keil的调试模式

调试方式 串口调试&#xff1a;通过串口通信&#xff0c;将调试信息发送到电脑端&#xff0c;电脑使用串口助手显示调试信息 显示屏调试&#xff1a;直接将显示屏连接到单片机&#xff0c;将调试信息打印在显示屏上 Keil调试模式&#xff1a;借助Keil软件的调试模式&#xf…

Vue模版语法之属性绑定v-bind

双大括号不能在 HTML 属性中使用。想要响应式地绑定一个属性&#xff0c;应该使用 v-bind 指令 1. 使用v-bind绑定属性 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>新建页面</title><sc…

pclpy 安装和使用

pclpy 安装和使用 一、安装pclpy二、问题与解决方法三、测试四、测试结果五、相关链接 一、安装pclpy pclpy是点云库(PCL)的Python绑定。使用CppHeaderParser和pybind11从头文件生成。这个库正在积极开发中&#xff0c;目前Windows只支持python 3.6 x64 和 python3.7&#xff…

Arcgis小技巧【17】——如何修改ArcGIS中影像的背景颜色

一、问题分析 在ArcGIS中&#xff0c;有时候会遇到影像有背景色&#xff0c;看上去很不美观。 尤其在多个影像叠加的时候&#xff0c;更是会造成遮挡的问题。 二、解决办法 首先&#xff0c;用【识别】工具在背景色是点击一下&#xff0c;查看弹出的窗口&#xff0c;记住背景…

Leetcode1206(设计跳表)

例题&#xff1a; 分析&#xff1a; 我们先来找一找跳表与单链表的相同点和不同点。 相同点&#xff1a; 跳表和单链表一样&#xff0c;都是由一个一个的节点组成的链表。 不同点&#xff1a; ①&#xff1a;跳表中的元素已经是排好序的&#xff08;图中从小到大&#xff09;&…