pyautogui的简单使用

article/2025/8/25 7:11:32

pyautogui的简单操作

  • 1.安装
  • 2. 鼠标的操作
  • 3. 键盘功能
  • 4.消息框
  • 5.截图定位
  • 6.小试

1.安装

  1. Windows安装
    1. 自动化

      pip install pyautogui
      
    2. 图像处理

      pip install opencv-python
      
    3. excel处理

      pip install xlrd
      
    4. 复制粘贴

      pip install pyperclip
      

2. 鼠标的操作

  1. 当前鼠标的位置

    pyautogui.position()
    
  2. 当前屏幕分辨率

    pyautogui.size()
    
  3. 判断坐标是否在屏幕内

    pyautogui.onScreen(x,y)
    
  4. 鼠标移动,左上角坐标位(0,0),x向右增加,y向下增加.若durations小于pyautogui.MINIMUM_DURATION=0.1移动是即时的,

    pyautogui.moveTo(x,y,duration=num_seconds)
    
  5. 相对于当前位置移动鼠标

    pyautogui.moveRel(xOffset,yOffset,duration=num_seconds)
    pyautogui.move(x,y)
    
  6. 鼠标拖动,dragTo()与drag()与moveTo()和move()类似,button决定按哪个键拖动

    pyautogui.dragTo(x,y,button='left')#左键拖动
    
  7. 鼠标点击

    pyautogui.click()#当前位置单击
    pyautogui.click(x=moveTox,y=moveToy,clicks=num_of_clicks,interval=secs_clicks,button='left')
    #interval 单击之间等待的秒数
    #doubleClick() 执行鼠标双击
    #right/left/middle/Click() 右击/左击/中间单击
    #mouseDown()/mouseUp() 鼠标按下/释放,可进行鼠标拖动
    
  8. 鼠标滚动

    pyauotgui.scroll(10) #向上滚动10格
    pyautogui.scroll(-10) #向下,,,
    pyautogui.scrolll(10,x=10,y=100) # 将鼠标移到x,y,在向上滚动10格
    # OS X和Linux平台上,可以通过和scroll()执行水平滚动
    

3. 键盘功能

  1. write()函数

    pyautogui.write('hello world',interval=0.25) # 打印书hellow world 每个字符后延迟0.25秒
    
  2. press()

    #keyDown(),keyUp()
    # press实现一个键按下与释放
    pyautogui.press('enter') #按下并释放enter
    pyautogui.press(['left','left','left'])
    pyautogui.press('left',presses=3)
    # 要在每次按下之间加延迟,interval int/float
    
  3. hold() 上下文管理器

    with pyautogui.hold('shift'):pyautogui.press(['left','left','left'])
    # 相当于先按住shift,再按三次left,再释放shift
    
  4. hotkey()

    # 为了方便按下热键或键盘快捷键,可以传递几个按键字符串,其按顺序按下,以相反顺序释放
    pyautogui.hotkey('ctrl','shift','esc')
    # 相当于先按下ctrl,shift,esc,再逐个释放esc,shift,ctrl
    

4.消息框

pyautogui利用PyMsgBox中的消息框函数来提供一种跨平台的纯Python方式来显示JavaScript样式的消息框

  1. alert()

    pyautogui.alert(text='',title='',button='OK') # 显示一个带有文本和确定按钮的简单消息框,用户点击返回button的文本
    
  2. confirm()

    pyautogui.confirm(text='',title='',buttons=['OK','Cancel']) #显示带有确定和取消按钮的消息框,可以自定义按钮的数量和文本,点击返回按钮的文本
    
  3. prompt()

    pyautogui.prompt(text='',title='','default='') # 显示文本输入和确定/取消按钮,确定返回输入的文本,单击取消返回None
    
  4. password()

    pyautogui.password(text='',titile='',default='',mask='*') # 显示文本输入和确认/取消按钮,键入的字符显示为*,返回输入文本,取消返回None
    

5.截图定位

pyautogui可以截取屏幕截图,并将之保存在文件中,,并在屏幕中定位图像。这些功能由PyScreez模块提供,该模块与pyautogui一起安装
屏幕截图功能需要安装(windows)

pip install Pillow
  1. screenshot()

    screenshot()# 返回一个Image对象,传递文件名字符串会将屏幕截图保存在文件中,并将其作为Image对象返回
    # 全屏
    img1=pyautogui.screenshot('文件名.png')
    # 区域
    img2=pyautogui.screenshot(region=(0,0,300,400))# 上下宽高捕获
    
  2. 定位函数

    # localOnScreen('文件名.png')获取图像所在位置,返回的是一个整数组元组:(左,上,宽,高),可以传递此元组center()以获取该区域中心x,y坐标,找不到会ImageNotFoundException
    # confidence参数 指定位精度,,需要安装OpenCV才起作用
    # localCenterOnScreen() #结合了localOnScreen()与center()
    x,y=pyautogui.localCenterOnScreen('文件名.png')
    pyautogui.click(x,y)
    
  3. 灰度匹配

    # 通过grayscale=True给定位函数增加灰度,可以稍微加速(大约30%左右),会降低图像与屏幕的颜色饱和度,加快定位,但可能会导致匹配错误
    loc=pyautogui.localOnScreen('文件名.png',grayscale=True)
    
  4. 像素匹配

    # 获取屏幕截图中像素的RGB颜色:
    img=pyautogui.screenshot()
    img.getpixel((100,200))
    # 或
    pyautogui.pixel(100,200) #(130,135,144)
    # 验证单个像素是否与给定的像素匹配
    pyautogui.pixelMatchesColor(100,200,(130,135,144)) # True
    # 可以使用tolerance指定红绿蓝在匹配的情况下可以变化多少
    pyautogui.pixelMatchesCoor(100,200,(140,125,134),tolerance=10) #True
    

6.小试

通过excel中的命令流程,自动打开浏览器,百度python,再关闭浏览器,再打开桌面备忘录,将excel中的文本输入到备忘录,并保存退出

#导入 用于自动化控制鼠标与键盘
import pyautogui
# 用于时间处理
import time
#用于读取excel中的操作指令
import xlrd
#导入粘贴复制模块
import pyperclip#定义鼠标事件#pyautogui库其他用法 https://blog.csdn.net/qingfengxd1/article/details/108270159
#定义鼠标操作方法
def mouseClick(clickTimes,lOrR,img,reTry):if reTry == 1:while True:#获取应用程序位置location=pyautogui.locateCenterOnScreen(img,confidence=0.9)if location is not None:# interval 单击之间等待的秒数#x,y是鼠标坐标,#duration为执行此次动作的设置时间,0为立即执行#button有几个默认选项,left,middle,right,primary,secondary 默认为左键模式,后两者组合就是拖动#拖动语句:# pyautogui.dragTo(x=None, y=None, duration=0.0, button='primary', mouseDownUp=True)# mouseDownUp设置为False则鼠标只是单纯的移动,不会按下与松开 duration设置为0或不设置也不行pyautogui.click(location.x,location.y,clicks=clickTimes,interval=0.2,duration=0.2,button=lOrR)breakprint("未找到匹配图片,0.1秒后重试")time.sleep(0.1)elif reTry == -1:while True:# confidence 查找图片精确度,默认为 1location=pyautogui.locateCenterOnScreen(img,confidence=0.9)if location is not None:pyautogui.click(location.x,location.y,clicks=clickTimes,interval=0.2,duration=0.2,button=lOrR)time.sleep(0.1)elif reTry > 1:i = 1while i < reTry + 1:location=pyautogui.locateCenterOnScreen(img,confidence=0.9)if location is not None:pyautogui.click(location.x,location.y,clicks=clickTimes,interval=0.2,duration=0.2,button=lOrR)print("重复")i += 1time.sleep(0.1)# 数据检查
# cmdType.value  1.0 左键单击    2.0 左键双击  3.0 右键单击  4.0 输入  5.0 等待  6.0 滚轮
# ctype     空:0
#           字符串:1
#           数字:2
#           日期:3
#           布尔:4
#           error:5
def dataCheck(sheet1):checkCmd = True#行数检查if sheet1.nrows<2:print("没数据啊哥")checkCmd = False#每行数据检查i = 1while i < sheet1.nrows:# 第1列 操作类型检查cmdType = sheet1.row(i)[0]#非数字 不正常操作if cmdType.ctype != 2 or (cmdType.value != 1.0 and cmdType.value != 2.0 and cmdType.value != 3.0 and cmdType.value != 4.0 and cmdType.value != 5.0 and cmdType.value != 6.0):print('第',i+1,"行,第1列数据有毛病")checkCmd = False# 第2列 内容检查cmdValue = sheet1.row(i)[1]# 读图点击类型指令,内容必须为字符串类型#字符串 左键双击或右键单击if cmdType.value ==1.0 or cmdType.value == 2.0 or cmdType.value == 3.0:if cmdValue.ctype != 1:# 非字符串print('第',i+1,"行,第2列数据有毛病")checkCmd = False# 输入类型,内容不能为空if cmdType.value == 4.0:#为空if cmdValue.ctype == 0:print('第',i+1,"行,第2列数据有毛病")checkCmd = False# 等待类型,内容必须为数字#等待if cmdType.value == 5.0:#为数字if cmdValue.ctype != 2:print('第',i+1,"行,第2列数据有毛病")checkCmd = False# 滚轮事件,内容必须为数字#滚轮if cmdType.value == 6.0:#非数字if cmdValue.ctype != 2:print('第',i+1,"行,第2列数据有毛病")checkCmd = Falsei += 1return checkCmd#任务
def mainWork(img):i = 1while i < sheet1.nrows:#取本行指令的操作类型cmdType = sheet1.row(i)[0]#左键单击if cmdType.value == 1.0:#取图片名称img = sheet1.row(i)[1].valueprint('图片名称:',img)#默认执行一次reTry = 1#第三列 内容为数字 且不为空if sheet1.row(i)[2].ctype == 2 and sheet1.row(i)[2].value != 0:#执行第三列值次reTry = sheet1.row(i)[2].valuemouseClick(1,"left",img,reTry)print("单击左键",img)#2代表双击左键elif cmdType.value == 2.0:#取图片名称img = sheet1.row(i)[1].value#取重试次数reTry = 1#重复执行第三列值次if sheet1.row(i)[2].ctype == 2 and sheet1.row(i)[2].value != 0:reTry = sheet1.row(i)[2].valuemouseClick(2,"left",img,reTry)print("双击左键",img)#3代表右键elif cmdType.value == 3.0:#取图片名称img = sheet1.row(i)[1].value#取重试次数reTry = 1if sheet1.row(i)[2].ctype == 2 and sheet1.row(i)[2].value != 0:reTry = sheet1.row(i)[2].valuemouseClick(1,"right",img,reTry)print("右键",img) #4代表输入elif cmdType.value == 4.0:inputValue = sheet1.row(i)[1].value#复制输入的内容pyperclip.copy(inputValue)#按顺序对传递的参数执行按键,然后按相反顺序执行按键释放pyautogui.hotkey('ctrl','v')#回车pyautogui.hotkey('enter')time.sleep(0.5)print("输入:",inputValue)                                        #5代表等待elif cmdType.value == 5.0:#取等待的秒数waitTime = sheet1.row(i)[1].valuetime.sleep(waitTime)print("等待",waitTime,"秒")#6代表滚轮elif cmdType.value == 6.0:#取图片名称scroll = sheet1.row(i)[1].value# scroll(clicks, x=None, y=None, logScreenshot=None, _pause=True):#执行鼠标滚轮操作,是垂直还是水平取决于底层操作系统#x,y说明鼠标事件发生的位置,若没有,则使用当前鼠标位置,若是悬浮值,# 则四舍五入,如果超出屏幕边界,则事件发生在屏幕边缘# 点击(int,float):要执行的滚动量。x(int,float,None,tuple,可选):屏幕上发生单击的x位置。默认情况下没有。如果是tuple,则用于x和y.y(int,float,None,可选):屏幕上发生单击的y位置。默认情况下没有pyautogui.scroll(int(scroll))print("滚轮滑动",int(scroll),"距离")                      i += 1if __name__ == '__main__':file = r'C:\Users\lenovo\Desktop\waterRPA\cmde.xls'#打开文件wb = xlrd.open_workbook(filename=file)#通过索引获取表格sheet页sheet1 = wb.sheet_by_index(0)print('欢迎来到wph的RPA~')#数据检查checkCmd = dataCheck(sheet1)if checkCmd:key=input('选择功能: 1.做一次 2.循环到死 3.退出\n')if key=='1':#循环拿出每一行指令mainWork(sheet1)elif key=='2':while True:mainWork(sheet1)time.sleep(0.1)print("等待0.1秒")elif key=='3':exit()else:print('输入有误或者已经退出!')
  1. 定位图片在这里插入图片描述
  2. excel命令流程在这里插入图片描述



  • 时间一分,贵如千金

http://chatgpt.dhexx.cn/article/GJxq0TZc.shtml

相关文章

selenium的PyAutoGUI模块

PyAutoGUI模块是一个图形用户界面自动化工具&#xff0c;通过屏幕的xy坐标系统确定目标位置&#xff0c;控制鼠标和键盘发送虚拟击键和鼠标点击&#xff0c;完成点击按钮&#xff0c;填写表单等操作&#xff0c;常用方法如下所示&#xff1a; 使用之前需要安装该模块&#xff…

pyautogui模拟鼠键

目录 pip3 install pyautogui即可安装该库&#xff01; 一 三 截图 pip3 install pyautogui 安装库&#xff01; 一 常用操作 我们在pyautogui库中常常使用的方法&#xff0c;如下&#xff1a; pyautogui.PAUSE 1 # 调用在执行动作后暂停的秒数&#xff0c;只能在执行一些…

PyAutoGUI Doc

PyAutoGUI——让所有GUI都自动化 本教程译自大神Al Sweigart的PyAutoGUI项目&#xff0c;Python自动化工具&#xff0c;更适合处理GUI任务&#xff0c;网页任务推荐&#xff1a; SeleniumFirefox记录&#xff08;Chromedriver和Phantomjs也很给力&#xff0c;Phantomjs虽然是无…

PyAutoGUI 使用介绍

这个 python 库是我用的比较多的第三方库了&#xff0c;因为它能帮我自动化操作许多事情&#xff0c;而且跨平台&#xff0c;非常好用。可以说是 python 中的按键精灵了。它不仅可以操作鼠标&#xff0c;还能操作键盘&#xff0c;屏幕截图&#xff0c;还能生成一些简单的交互窗…

Pyautogui 入门

安装&#xff1a;终端输入指令 pip3 install pyautogui 执行之后依赖库很多一起安装。 Successfully installed PyTweening-1.0.4 mouseinfo-0.1.3 pyautogui-0.9.53 pygetwindow-0.0.9 pymsgbox-1.0.9 pyobjc-8.3 pyobjc-core-8.3 pyobjc-framework-AVFoundation-8.3 pyobjc…

PyAutoGUI

PyAutoGUI 安装cmd Windows安装pycharm安装 备忘录通用功能故障安全鼠标功能键盘功能消息框功能截图函数 鼠标控制功能屏幕和鼠标位置鼠标移动鼠标拖动补间/缓动功能鼠标点击鼠标按下和鼠标悬停函数鼠标滚动 键盘控制功能write()函数press(), keyDown(), keyUp()函数hold()上下…

pyautogui库的使用教程(超详细)

一、前言 PyAutoGUI 让您的 Python 脚本控制鼠标和键盘以自动与其他应用程序交互。 官方文档&#xff1a;PyAutoGUI documentation 常用函数列表 函数名功能基本pyautogui.size()返回包含分辨率的元组pyautogui.PAUSE每个函数的停顿时间&#xff0c;默认0.1spyautogui.FAILSAF…

python自动化神器:pyautogui

详情可访问&#xff1a;pyautogui官网地址&#xff0c;关注本专栏&#xff0c;学习自动发消息给对象 文章目录 一、pyautogui是什么&#xff1f;二、使用步骤1.安装和引入库2.基本操作&#xff08;1)鼠标控制&#xff08;2)键盘控制&#xff08;3)屏幕截图&#xff08;4)图片位…

Python基础之pyautogui模块(详细总结鼠标键盘操作)

Python基础之鼠标操作 文章目录 Python基础之鼠标操作1. GUI 控制功能1.1 自动 防故障功能1.2 停顿功能 2. 鼠标操作2.1 控制鼠标移动2.2 控制鼠标点击2.3 控制鼠标拖动2.4 控制鼠标滚动 3. 屏幕处理3.1 获取屏幕截图3.2 识别图像 4. 键盘输入4.1 键盘输入函数4.2 键盘特殊按键…

EDW 模型设计概念

EDW模型设计概念 1、EDW体系架构 2、为何需要企业模型&#xff1f; 数据集市之间数据一致性&#xff1b;包含全部历史的核心数据&#xff1b;一致的事实表和维度等。 3、 EDW数据模型在项目实施中的作用 4、模型总体结构&#xff0d;EM & DataMarts 5、EDW具体实施流程 …

EDW2016|NOSQL异军突起 阿里首发中国企业好声音

美国西部时间4月17日至4月22日&#xff0c;第20届企业数据世界EDW大会在加利福尼亚州圣迭戈&#xff08;San Diego California&#xff09;呈现了精彩纷呈的六天五晚议程。 EDW大会全称是Enterprise Data World&#xff08;即&#xff1a;企业数据世界&#xff09;&#xff0c…

About EDW时间维度表的建立参考(DWD_CALENDAR)

0. 维度表 1. 创建表 -- Create table create table DWD_CALENDAR (site VARCHAR2(40),factory VARCHAR2(40),period_date DATE,period VARCHAR2(5),shift_start_timekey VARCHAR2(40),shift_end_timekey VARCHAR2(40),dat…

BW:EDW——一次小小的探讨

方其华|北京 2010/9/17 10:46:13 这个有点差别的。我们采用的是EDW的架构。所以到我这里的话。源显示的不是ODS。而是数据源。 郑平深圳 2010/9/17 10:47:04 郑岩|北京(332327496) 2010/9/17 10:50:06 EDW架构&#xff1f; 郑岩|北京(332327496) 2010/9/17 10:50:09 …

EDW DWM CONCEPT

非事实型事实表――factless fact table 在维度建模的数据仓库中&#xff0c;有一种事实表叫Factless Fact Table&#xff0c;中文一般翻译为“非事实型事实表”。在事实表中&#xff0c;通常会保存十个左右的维度外键和多个度量事实&#xff0c;度量事实是事实表的关键所在。…

EDW on Hadoop(Hadoop上的数据仓库)技术选型和实践思考

在这篇文章中, 将讨论EDW on Hadoop 有哪些备选方案, 以及我个人的倾向性, 最后是建构方法. 欢迎转载, 但必须注明原贴(刘忠武, http://www.cnblogs.com/harrychinese/p/edw_on_hadoop.html). 数据仓库发展已经有二十多年了, 我们先看看数据仓库发展的趋势: 在数据规模小的时…

(转载)浅析ODS与EDW 关系

浅析ODS与EDW 关系 刘智琼 (中国电信集团广州研究院广州510630) 摘要 本文重点介绍了企业运营数据仓储(ODS)和企业数据仓库(EDW )的概念&#xff0c;并对ODS与EDW 之间的关系&#xff0c;包括两者相同点与不同点进行了详尽的对比与阐述&#xff0c;文章还对业界公认的ODS和E…

ETL(一):(详细步骤)使用ETL将源数据抽取到EDW层

1、ETL中4大常用客户端 R客户端主要用于创建文件夹&#xff0c;不同的项目主题&#xff0c;应该放在不同的文件夹中&#xff1b; 2、ETL开发流程 ①~③在D客户端中完成&#xff1b;④和⑤在W客户端中完成&#xff1b;⑥在M客户端中完成&#xff1b; 3、需求 需求一&#xff…

浅析ODS与EDW关系(转载)

背景知识&#xff1a;在当今这样一个信息技术发展迅速的时代&#xff0c;数据量也在不断的增长&#xff0c;面临这样的压力&#xff0c;总是会有大神提出一些解决方案。比如高层管理人员希望能查看整个公司的发展业绩&#xff0c;数据仓库(Data Warehouse, DW)正是解决该问题的…

ODS和EDW

企业运营数据仓储(ODS)和企业数据仓库(EDW ) 企业数据架构 EDW主要为企业提供分析决策服务。ODS主要实现企业数据整合、共享和准实时运营监控等功能&#xff0c;ODS是EDW的一个有益的补充和扩展 其中&#xff0e;ADB为应用数据库&#xff1b;A、B、C表示不同类型的数据流动&am…

浅析ODS与EDW 关系(转载)

摘要 本文重点介绍了企业运营数据仓储(ODS)和企业数据仓库(EDW )的概念&#xff0c;并对ODS与EDW 之间的关系&#xff0c;包括两者相同点与不同点进行了详尽的对比与阐述&#xff0c;文章还对业界公认的ODS和EDW 两种不同建设方法也分别进行了说明&#xff0c;并给出了作者认为…