百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

桌面自动化---PyAutoGUI(桌面自动化linux)

itomcoil 2025-05-08 01:58 4 浏览

目录

  • 一:安装
  • 二:鼠标操作:
  • 1:屏幕和鼠标的位置(行X竖Y):
  • 2:获取屏幕和鼠标的位置:
  • 3:鼠标移动和点击:
  • 4: 鼠标移动案例:
  • 5:鼠标拖拽
  • 6: 鼠标滚动
  • 7:保护措施:
  • 8: mouseDown()和mouseUp()函数
  • 三:键盘操作:
  • 1:write函数的使用
  • 2:press函数,keyDown和keyUp函数的使用:
  • 3:hotkey函数的使用:
  • 四:信息框操作:
  • 五:截图和定位操作:
  • 1:screenshot函数的使用:
  • 2:locateOnScreen与locateCenterOnScreen函数的使用:
  • 3:提高定位精度
  • 4:加速定位

一:安装

windows:

pip install pyautogui -i https://pypi.tuna.tsinghua.edu.cn/simple
mac:
pip install pyobjc-core
pip install pyobjc
pip install pyautogui

linux:

#sudo apt-get install scrot python3-tk python3-dev
pip install python3-xlib
pip install pyautogui

二:鼠标操作:

1:屏幕和鼠标的位置(行X竖Y):

左上角的像素位于坐标0、0。如果屏幕的分辨率为1920 x 1080,则右下角的像素将为1919、1079(因为坐标始于0,而不是1)。

屏幕分辨率大小由该size()函数作为两个整数的元组返回。该position()函数返回鼠标光标的当前X和Y坐标。

+---------------------------+
|                                           |   X   increases
|                                           |             |
|      1920 x 1080 screen      |             |
|                                           |            Y
|                                           |
|                                           |
+---------------------------+ 1919, 1079

2:获取屏幕和鼠标的位置:

import pyautogui
# 获取屏幕分辨率
print(pyautogui.size())
# 获取鼠标的坐标位置
x, y = pyautogui.position()
print("X: %s Y: %s" % (x, y))

注意: 获取到的是电脑设置中的分辨率。如果是虚拟机也是按照虚拟机的设置,不能根据电脑中的分辨率。

3:鼠标移动和点击:

  • 相对移动:pyautogui.move(65, 168)—相对的是当前鼠标的位置。
  • 绝对移动: pyautogui.moveTo(65, 168)
  • 每个动作后停留时间: pyautogui.PAUSE = 2
  • 判断像素点是不是在屏幕中:pyautogui.onScreen(65, 168)
  • 当前位置点击: pyautogui.click()
  • 先移动到位置再点击: pyautogui.click(x=100, y=200)
  • 移动到某个位置左击,右击,中间点击:pyaotogui.click(x=100, y=200, button=‘right’)
  • 移动到某个位置左击,右击,中间多次点击: pyaotogui.click(x=100, y=200, button=‘right’, clicks=3)
  • 移动到某个位置左击,右击,中间多次点击,中间间隔0.25秒点击:pyaotogui.click(x=100, y=200, button=‘right’, clicks=3, interval=0.25)
  • 左击: pyautogui.leftClick(x, y, 过程中秒数)
  • 右击:pyautogui.rightClick(x, y, 过程中秒数)
  • 双击:pyautogui.doubleClick(x, y, 过程中秒数)

4: 鼠标移动案例:

描述:定位桌面的回收站,然后右击,再用相对路径,左击属性。

# 定位桌面的回收站,然后右击,再用相对路径,左击属性:(57, 285)
import pyautogui
# # 每个动作后,停留两秒
# pyautogui.PAUSE = 2
# 1: 移动到回收站的位置,2表示移动过程两秒
pyautogui.moveTo(57, 285, 2)
# 2: 右击
pyautogui.rightClick()
# 3:
pyautogui.move(87, 200, 2)
pyautogui.leftClick()

5:鼠标拖拽

案例:将回收站向右拖拽500像素。

import pyautogui

# 1: 鼠标移动到指定位置---绝对(left表示鼠标左键,middle表示中间键, right表示右键)
pyautogui.dragTo(57, 285, button='left')
# 2: 进行拖拽,3表示执行时间---相对
pyautogui.drag(500, 0, 3)

6: 鼠标滚动

案例:定位到代码框,然后滚动

# 案例:定位到代码框,然后滚动
import pyautogui
import time
# 1:定位到代码框:
pyautogui.click(1100, 460,)
# 2: 向下滚动:
pyautogui.scroll(-1000)
time.sleep(1)
# 3: 向上滚动
pyautogui.scroll(1000)

7:保护措施:

为了能够及时中断,PyAutoGUI提供了一个保护措施。当pyautogui.FAILSAFE = True时,如果把鼠标光标在屏幕左上角,PyAutoGUI函数就会产生
pyautogui.FailSafeException异常。如果失控了,需要中断PyAutoGUI函数,就把鼠标光标在屏幕左上角。要禁用这个特性,就把FAILSAFE设置成False。

案例:禁用保护

import pyautogui
# 运行过程中,用户动鼠标: 与用户不冲突
pyautogui.FAILSAFE = False
while True:
  	pyautogui.moveTo(400, 400)
		pyautogui.moveTo(1000, 400)

8: mouseDown()和mouseUp()函数

import pyautogui
import time
# 鼠标定位到我的电脑,进行右击
pyautogui.mouseDown(button="right", x=50, y=54)
pyautogui.mouseUp()
time.sleep(2)
# 鼠标定位到属性,进行左击
pyautogui.mouseDown(button="left", x=86, y=356)
pyautogui.mouseUp()

三:键盘操作:

1:write函数的使用

  • 中文不支持,需要配合pyperclip一起使用。
  • interval 关键字进行延时操作。

案例:手动打开记事本,定位到记事本,分别写入“hahaha”和“哈哈哈”。

import pyautogui
import pyperclip

# 移动到位置进行点击
pyautogui.moveTo(520, 520, 1)
pyautogui.click()

# 书写中文
pyautogui.write("hahaha\n\n", interval=1)

# 复制中文,然后粘贴
pyperclip.copy('哈哈哈')
pyautogui.hotkey('ctrl', 'v')

2:press函数,keyDown和keyUp函数的使用:

案例: 使用pass函数,和keydown,keyup,write函数分别完成一次,敲击回车

import pyautogui
import time

pyautogui.moveTo(520, 520, 1)
pyautogui.click()

# 1: 使用press敲击3次回车
pyautogui.press('enter', presses=3)
pyautogui.write("hahaha\n")
time.sleep(1)

# 2:使用keydown 和keyup敲击三次回车
pyautogui.keyDown("enter")
pyautogui.keyUp('enter')
pyautogui.keyDown("enter")
pyautogui.keyUp('enter')
pyautogui.keyDown("enter")
pyautogui.keyUp('enter')
pyautogui.write("hahaha\n")
time.sleep(1)

# 3: 使用write敲击三次回车
pyautogui.write(['enter', 'enter', 'enter'])
pyautogui.write("hahaha\n")

3:hotkey函数的使用:

案例使用热键:打开任务管理器:

import pyautogui
pyautogui.hotkey('ctrl', 'shift', 'esc')

四:信息框操作:

方法

作用

pyautogui.alert()

简单提示消息框

pyautogui.confirm()

多按钮消息框

pyautogui.prompt()

明文输入消息框

pyautogui.password()

密文输入消息框

案例一:

显示带有文本和单个“确定”按钮的简单消息框。返回单击的按钮的文本。

import pyautogui

el = pyautogui.alert(text='哈喽,我是任善文', title='打招呼', button='OK')
print(el)

案例二:显示带有“确定”和“取消”按钮的消息框。可以自定义按钮的数量和文本。返回单击的按钮的文本。(点击取消)

import pyautogui

el = pyautogui.confirm(text='哈喽,我是任善文', title='打招呼', buttons=['OK', 'Cancel'])
print(el)

案例三:显示带有文本输入以及“确定”和“取消”按钮的消息框。返回输入的文本,如果单击“取消”,则返回“无”。

import pyautogui

el = pyautogui.prompt(text='哈喽,我是任善文', title='打招呼', default='哈喽,我是XXX')
print(el)

案例四:显示带有文本输入以及“确定”和“取消”按钮的消息框。输入的字符显示为*。返回输入的文本,如果单击“取消”,则返回“无”。

import pyautogui

el = pyautogui.password(text='请输入密码', title='密码账号登录', default='12345678', mask='*')
print(el)

五:截图和定位操作:

1:screenshot函数的使用:

案例: 截取回收站图标,保存到文件中。

import pyautogui

img = pyautogui.screenshot('./images/screenshot.png', region=(1, 250, 90, 100))
print(img)

截图如图所示:

返回的是Image对象

2:locateOnScreen与locateCenterOnScreen函数的使用:

案例一:通过刚才截取的图片,找到回收站的位置,然后双击回收站打开。(全屏搜索)

import pyautogui
import time

# 1:截取回收站的图片
img = pyautogui.screenshot('./images/screenshot.png', region=(1, 250, 90, 100))
print(img) # 图片类型

# 2:全屏搜索图片(回收站)---获取的会是一个区域
rect = pyautogui.locateOnScreen('./images/screenshot.png')
print(type(rect)) # 盒子类型
print(rect[0], rect[1], rect[2], rect[3])

# 3:在区域中获取中心位置
point = pyautogui.center(rect)
print(type(point)) # 点类型
x, y = point
print(x, y)
time.sleep(1)

# 4: 双击中心位置
pyautogui.doubleClick(x, y)


案例二:使用locateCenterOnScreen,在区域内查询。

import pyautogui
import time

# 1:截取回收站的图片
img = pyautogui.screenshot('./images/screenshot.png', region=(1, 250, 90, 100))
print(img)

# 2:全屏搜索图片(回收站)---获取的会是一个区域
point = pyautogui.locateCenterOnScreen('./images/screenshot.png')
print(type(point))
x, y = point
time.sleep(1)

# 3: 双击中心位置
pyautogui.doubleClick(x, y)


3:提高定位精度

1: 安装OpenCv,由于文件太大需要指定默认等待下载时间(如果网速好可以不用指定)

pip --default-timeout=20000 install -U opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple

表示下载成功。

2:可选的confidence关键字参数指定函数在屏幕上定位图像的精度。

import pyautogui

# 可以通过图片,在屏幕上定位图像所在的位置
# 找到返回的是一个4边距元组 (top, left, width, height),没有找到返回None
# 全屏幕搜素
rect = pyautogui.locateOnScreen('./images/x3.png', confidence=0.6)
print(rect)

4:加速定位

1: 指定搜索区域:

pyautogui.locateOnScreen('./images/computer.png', region=(0, 0, 400, 400))

2: 降低图片颜色的饱和度:

pyautogui.locateOnScreen('./images/computer.png', grayscale=True)

--------------------------------

#python自学##每天学python#

喜欢的话
建议收藏关注!

相关推荐

Excel新函数TEXTSPLIT太强大了,轻松搞定数据拆分!

我是【桃大喵学习记】,欢迎大家关注哟~,每天为你分享职场办公软件使用技巧干货!最近我把WPS软件升级到了版本号:12.1.0.15990的最新版本,最版本已经支持文本拆分函数TEXTSPLIT了,并...

Excel超强数据拆分函数TEXTSPLIT,从入门到精通!

我是【桃大喵学习记】,欢迎大家关注哟~,每天为你分享职场办公软件使用技巧干货!今天跟大家分享的是Excel超强数据拆分函数TEXTSPLIT,带你从入门到精通!TEXTSPLIT函数真是太强大了,轻松...

看完就会用的C++17特性总结(c++11常用新特性)

作者:taoklin,腾讯WXG后台开发一、简单特性1.namespace嵌套C++17使我们可以更加简洁使用命名空间:2.std::variant升级版的C语言Union在C++17之前,通...

plsql字符串分割浅谈(plsql字符集设置)

工作之中遇到的小问题,在此抛出问题,并给出解决方法。一方面是为了给自己留下深刻印象,另一方面给遇到相似问题的同学一个解决思路。如若其中有写的不好或者不对的地方也请不加不吝赐教,集思广益,共同进步。遇到...

javascript如何分割字符串(javascript切割字符串)

javascript如何分割字符串在JavaScript中,您可以使用字符串的`split()`方法来将一个字符串分割成一个数组。`split()`方法接收一个参数,这个参数指定了分割字符串的方式。如...

TextSplit函数的使用方法(入门+进阶+高级共八种用法10个公式)

在Excel和WPS新增的几十个函数中,如果按实用性+功能性排名,textsplit排第二,无函数敢排第一。因为它不仅使用简单,而且解决了以前用超复杂公式才能搞定的难题。今天小编用10个公式,让你彻底...

Python字符串split()方法使用技巧

在Python中,字符串操作可谓是基础且关键的技能,而今天咱们要重点攻克的“堡垒”——split()方法,它能将看似浑然一体的字符串,按照我们的需求进行拆分,极大地便利了数据处理与文本解析工作。基本语...

go语言中字符串常用的系统函数(golang 字符串)

最近由于工作比较忙,视频有段时间没有更新了,在这里跟大家说声抱歉了,我尽快抽些时间整理下视频今天就发一篇关于go语言的基础知识吧!我这我工作中用到的一些常用函数,汇总出来分享给大家,希望对...

无规律文本拆分,这些函数你得会(没有分隔符没规律数据拆分)

今天文章来源于表格学员训练营群内答疑,混合文本拆分。其实拆分不难,只要规则明确就好办。就怕规则不清晰,或者规则太多。那真是,Oh,mygod.如上图所示进行拆分,文字表达实在是有点难,所以小熊变身灵...

Python之文本解析:字符串格式化的逆操作?

引言前面的文章中,提到了关于Python中字符串中的相关操作,更多地涉及到了字符串的格式化,有些地方也称为字符串插值操作,本质上,就是把多个字符串拼接在一起,以固定的格式呈现。关于字符串的操作,其实还...

忘记【分列】吧,TEXTSPLIT拆分文本好用100倍

函数TEXTSPLIT的作用是:按分隔符将字符串拆分为行或列。仅ExcelM365版本可用。基本应用将A2单元格内容按逗号拆分。=TEXTSPLIT(A2,",")第二参数设置为逗号...

Excel365版本新函数TEXTSPLIT,专攻文本拆分

Excel中字符串的处理,拆分和合并是比较常见的需求。合并,当前最好用的函数非TEXTJOIN不可。拆分,Office365于2022年3月更新了一个专业函数:TEXTSPLIT语法参数:【...

站长在线Python精讲使用正则表达式的split()方法分割字符串详解

欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是《在Python中使用正则表达式的split()方法分割字符串详解》。使用正则表达式分割字符串在Python中使用正则表达式的split(...

Java中字符串分割的方法(java字符串切割方法)

技术背景在Java编程中,经常需要对字符串进行分割操作,例如将一个包含多个信息的字符串按照特定的分隔符拆分成多个子字符串。常见的应用场景包括解析CSV文件、处理网络请求参数等。实现步骤1.使用Str...

因为一个函数strtok踩坑,我被老工程师无情嘲笑了

在用C/C++实现字符串切割中,strtok函数经常用到,其主要作用是按照给定的字符集分隔字符串,并返回各子字符串。但是实际上,可不止有strtok(),还有strtok、strtok_s、strto...