侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Python使用pyautogui模块实现自动化鼠标和键盘操作示例

Python  /  管理员 发布于 7年前   594

本文实例讲述了Python使用pyautogui模块实现自动化鼠标和键盘操作。分享给大家供大家参考,具体如下:

一、pyautogui模块简要说明

## 使用 pyautogui 模块相关函数,可以模拟鼠标及键盘操作, 完整说明文档见: http://pyautogui.readthedocs.org/
# pip install pyautogui
# 要注意的是,模拟移动鼠标与击键可能太快,导致其他程序跟不上,并且程序可能失去控制,
# 需要掌握如何从问题中恢复,至少要能中止它。
# 防止或恢复GUI自动化问题
# 1) 使用pyautogui.PAUSE设置每个PyAutoGUI函数调用在执行动作后暂停的秒数
# 2) pyautogui自动防故障功能:将鼠标移到屏幕的左上角,来抛出failSafeException异常

二、控制鼠标移动与交互

三、屏幕快照与识别比较

四、控制键盘

五、综合例子

具体见以下代码及说明:

## 使用 pyautogui 模块相关函数,可以模拟鼠标及键盘操作, 完整说明文档见: http://pyautogui.readthedocs.org/# pip install pyautogui# 要注意的是,模拟移动鼠标与击键可能太快,导致其他程序跟不上,并且程序可能失去控制,# 需要掌握如何从问题中恢复,至少要能中止它。# 防止或恢复GUI自动化问题#  1) 使用pyautogui.PAUSE设置每个PyAutoGUI函数调用在执行动作后暂停的秒数#  2) pyautogui自动防故障功能:将鼠标移到屏幕的左上角,来抛出failSafeException异常import pyautoguipyautogui.PAUSE = 1pyautogui.FAILSAFE = True      # 启用自动防故障功能width,height = pyautogui.size()   # 屏幕的宽度和高度pyautogui.position()        # 鼠标当前位置## 控制鼠标移动for i in range(10):  pyautogui.moveTo(100,100,duration=0.25)   # 移动到 (100,100)  pyautogui.moveTo(200,100,duration=0.25)  pyautogui.moveTo(200,200,duration=0.25)  pyautogui.moveTo(100,200,duration=0.25)for i in range(10):  pyautogui.moveRel(100,0,duration=0.25)    # 从当前位置右移100像素  pyautogui.moveRel(0,100,duration=0.25)    # 向下  pyautogui.moveRel(-100,0,duration=0.25)   # 向左  pyautogui.moveRel(0,-100,duration=0.25)   # 向上## 例子:持续获取鼠标位置并更新显示# 1.获取当前坐标# 2.在屏幕上打印,并删除之前打印的坐标# 3.处理异常,并能按键退出# Displays the mouse cursor's currrent position.import pyautoguiprint('Press Ctrl-C to quit.')try:  while True:    # Get and print the mouse coordinates.    x,y = pyautogui.position()    positionStr = 'X: '+str(x).rjust(4)+' Y:'+str(y).rjust(4)    pix = pyautogui.screenshot().getpixel((x,y))  # 获取鼠标所在屏幕点的RGB颜色    positionStr += ' RGB:('+str(pix[0]).rjust(3)+','+str(pix[1]).rjust(3)+','+str(pix[2]).rjust(3)+')'    print(positionStr,end='')           # end='' 替换了默认的换行    print('\b'*len(positionStr),end='',flush=True) # 连续退格键并刷新,删除之前打印的坐标,就像直接更新坐标效果except KeyboardInterrupt:   # 处理 Ctrl-C 按键  print('\nDone.')## 控制鼠标交互# pyautogui.click() 封装了 pyautogui.mouseDown()和pyautogui.mouseUp(), 这两个函数也可以单独使用# pyautogui.doubleClick() 双击左键, pyautogui.rightClick() 双击右键,pyautogui.middleClick() 双击中键import pyautoguipyautogui.click(10,5)           # 在(10,5)单击鼠标,默认左键pyautogui.click(100,150,button='left')pyautogui.click(200,250,button='right')# pyautogui.dragTo()  按键并拖动鼠标移动,参数为坐标,与moveTo相同# pyautogui.dragRel()  按键并拖动鼠标移动,参数为距离,与moveRel相同import pyautogui,timetime.sleep(5)# 这里停顿5秒,用于手工打开windows绘图应用,并选中铅笔或画图工具,让鼠标停留在画图工具的窗口中# 或使用在线paint (http://sumopaint.com)pyautogui.click()   # click to put drawing program in focusdistance = 200while distance > 0 :  pyautogui.dragRel(distance,0,duration=0.2) # move right  distance = distance - 5  pyautogui.dragRel(0,distance,duration=0.2) # move down  pyautogui.dragRel(-distance,0,duration=0.2) # move left  distance = distance - 5  pyautogui.dragRel(0,-distance,duration=0.2) # move upprint('Done')pyautogui.scroll(200)     # 鼠标向上滚动200像素pyautogui.scroll(-100)    #   负数向下import pyperclipnumbers = ''for i in range(200):  numbers = numbers + str(i) + '\n'pyperclip.copy(numbers)print(numbers)# 这里手动打开一个文本窗口,粘贴import time,pyautoguitime.sleep(5);pyautogui.scroll(100)## 分析屏幕快照import pyautoguiim = pyautogui.screenshot()   # 获取屏幕快照im.getpixel((50,200))      # (130,135,144)pyautogui.pixelMatchesColor(50,200,(130,135,144))  # True 可用来判断屏幕是否发生变化pyautogui.pixelMatchesColor(50,200,(255,135,144))  # False# 图像定位识别pyautogui.locateOnScreen('submit.png')  # 在屏幕上查找匹配与文件相同的区域--每个区域像素都要相同 左,顶,宽,高pyautogui.center(pyautogui.locateOnScreen('submit.png')) # 获取匹配图像中心点坐标pyautogui.click((678,759))        # 点击该区域核心list(pyautogui.locateAllOnScreen('submit.png'))  # 匹配到多处,返回区域list## 控制键盘pyautogui.click(100,100);pyautogui.typewrite('Hello python')pyautogui.typewrite(['a','b','left','left','X','Y']) # typewrite可传入击键列表,这里输出XYab,left是左箭头print(pyautogui.KEYBOARD_KEYS)      # pyautogui接受的所有可能字符串pyautogui.press('enter')         # 接受按键命令pyautogui.keyDown('shift');pyautogui.press('4');pyautogui.keyUp('shift')  # 输出 $ 符号的按键#热键组合pyautogui.keyDown('ctrl')pyautogui.keyDown('c')pyautogui.keyUp('c')pyautogui.keyUp('ctrl')# 这四句是组合 ctrl-c,类似这种顺序按下,再反序释放的,可以用hotkey()pyautogui.hotkey('ctrl','c')        # 同上面四句,组合键pyautogui.hotkey('ctrl','alt','shift','s') # Ctrl-Alt-Shift-S 热键组合## 综合例子: 自动填表程序# http://autbor.com/form# 将电子表格中的大量数据自动输入到另一个应用的表单界面# 1.点击表单的第一个文本字段# 2.遍历表单,再每个输入栏键入信息# 3.点击submit按钮# 4.用下一组数据重复这个过程# Automatically fills in the form.import pyautogui,time# set these to the correct coordinates for your computer.nameField = (648,319)submitButton = (651,817)submitButtonColor = (75,141,249)submitAnotherLink = (760,224)formData = [{'name':'Alice','fear':'eavppers','source':'wand','robocop':4,'comments':'Tell us'},      {'name':'Bog','fear':'eaves','source':'crystal','robocop':4,'comments':'Big room'},      {'name':'Kad','fear':'apple','source':'woold','robocop':1,'comments':'Nice day'},      {'name':'Cace','fear':'ppers','source':'ball','robocop':5,'comments':'n/a'}      ]pyautogui.PAUSE = 0.5for person in formData:  # Give the user a chance to kill the script.  print('>>> 5 SECOND PAUSE TO LET USER PRESS CTRL-C <<<')  time.sleep(5)  # Wait until the form page has loaded.  while not pyautogui.pixelMatchesColor(submitButton[0],submitButton[1],submitButtonColor):    time.sleep(0.5)  print('Entering %s info...' % (person['name']))  pyautogui.click(nameField[0],nameField[1])    # 单击第一个文本字段输入位置  # Fill out the Name field.  pyautogui.typewrite(person['name']+'\t')     # 输入该域,并按下 tab 键,将焦点转向下一个输入框  # Fill out the Greatest Fear(s) field.  pyautogui.typewrite(person['fear']+'\t')  # 处理下拉框  # Fill out the Source of Wizard Powers Field  if person['source'] == 'wand':    pyautogui.typewrite(['down','\t'])  elif person['source'] == 'crystal':    pyautogui.typewrite(['down','down','\t'])  elif person['source'] == 'woold':    pyautogui.typewrite(['down','down','down','\t'])  elif person['source'] == 'ball':    pyautogui.typewrite(['down','down','down','down','\t'])  # 处理单选按钮  # Fill out the RoboCop field  if person['robocop'] == 1:    pyautogui.typewrite([' ','\t'])  elif person['robocop'] == 2:    pyautogui.typewrite(['right','\t'])  elif person['robocop'] == 3:    pyautogui.typewrite(['right','right','\t'])  elif person['robocop'] == 4:    pyautogui.typewrite(['right','right','right','\t'])  elif person['robocop'] == 5:    pyautogui.typewrite(['right','right','right','right','\t'])  # Fill out the Additional Comments field.  pyautogui.typewrite(person['comments']+'\t')  # Click Submit.  pyautogui.press('enter')  # Wait until form page has loaded.  print('Clicked submit.')  time.sleep(5)  # Click the Submit another response link.  pyautogui.click(submitAnotherLink[0],submitAnotherLink[1])

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。


  • 上一条:
    Python实现监控键盘鼠标操作示例【基于pyHook与pythoncom模块】
    下一条:
    Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客