pyautogui、pyperclip自动化模块基础及测试案例

2023-12-03 09:20

本文主要是介绍pyautogui、pyperclip自动化模块基础及测试案例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

pyautogui、pyperclip自动化模块基础及测试案例

    • 1. pyautogui、pyperclip基础
      • 1.1 pyautogui
        • 1.1.1. 坐标
        • 1.1.2. 鼠标控制
        • 1.1.3. 键盘控制
      • 1.2 pyperclip
    • 2. 给女神自动发多喝热水消息测试案例
    • 3. 知乎自动评论测试案例
    • 4. 测试和gif效果

参考【知乎burning】PyAutoGUI——图形用户界面自动化

最后更新日期:2020/8/13
更新说明:补充鼠标坐标定位方法
咱中国人 就没怕过美国!为中华之崛起而读书!

pyautogui官方文档

1. pyautogui、pyperclip基础

1.1 pyautogui

PyAutoGUI用屏幕的xy坐标进行定位,可以控制鼠标的操作、触发键盘操作,非常适合完成windows/linux桌面系统中无聊重复的工作。

1.1.1. 坐标

原点是屏幕左上角,向右x坐标增大,向下y坐标增大,绝对坐标都是正整数
pyautogui.size()

  • 屏幕的像素元组:Size(width=2560, height=1440)
  • 左上角坐标为(0, 0)
  • 右下角坐标为(2559, 1439)
1.1.2. 鼠标控制
# 当前鼠标所在坐标
Point(x=1960, y=279) 
# 绝对移动 移动到(1100, 400),耗时.7秒
pyautogui.moveTo(x=1100, y=400, duration=0.7) 
# 相对移动 相对于当前鼠标位置移动偏移量(-10, -40),即往左10像素、上40像素
pyautogui.moveRel(xOffset=-10, yOffset=-40)
# 按下左键
pyautogui.mouseDown()
# 释放左键
pyautogui.mouseUp()
# 按下释放一次左键
pyautogui.click() 
# 左击一次
pyautogui.click(clicks=1, button='left', interval=0.05)
# 双击左键
pyautogui.doubleClick()
# 单击右键
pyautogui.rightClick()
# 点击中键
pyautogui.middleClick() 
# 绝对拖动 默认按住左键拖动到(500, 700),用时1秒
pyautogui.dragTo(x=500, y=700, duration=1)
# 相对拖动 按住右键拖动偏移量(500, -20) 相对于当前鼠标向右500像素,向上20像素,用时1秒
pyautogui.dragRel(xOffset=500, yOffset=-20, button='right', duration=1)
# 滚动 屏幕向上滚动100像素
pyautogui.scroll(-100)

做了几个案例后,发现鼠标的定位是个难题,这里提供一个方便开发的工具:
pyautogui.mouseInfo()
例如我们现在写一个打开桌面回收站并清理的自动化代码,需要如下几个步骤(电脑坏了,待补充!!)

1.1.3. 键盘控制
pyautogui.typewrite(['t', 'e', 's', 't', 'left', 'left', 'left', 'left', 'M', 'S', 'G'], interval=.2)       	# 英文输入 只能单个字符或者一个按键 left代表方向键
pyautogui.keyDown('w')				# 按下w
pyautogui.keyUp('w')				# 释放w
pyautogui.press('end')      		# 封装上两步操作,按下并释放end键
pyautogui.hotkey('ctrl', 'v')		# 热键ctrl+v

pyautogui.hotkey('ctrl', 'v')
与下面四句同效果:

pyautogui.keyDown('ctrl')
pyautogui.keyDown('v')
pyautogui.keyUp('v')
pyautogui.keyUp('ctrl')

关于键盘操作的方法可以输入的字符串有如下:

键盘键字符串                        含义
'a','b','c','A','C','1','2','3',    单个字符的键
'!','@','#''enter'                             回车‘esc'                              ESC键'shiftleft','shiftright'            左右Shift键'altleft','altright'                左右Alt键'ctrlleft','ctrlright'              左右Ctrl键‘tab'(or '\t')                     Tab键'backspace','delete'                Backspace键和Delete键'pageup','pagedown'                 Page Up 和Page Down键'home','end'                        Home键和End键'up','down','left','right'          上下左右箭头键'f1','f2','f3'等                    F1至F12键'volumemute','volumeup',volumedown' 静音,放大音量和减小音量键'pause'                             暂停键'capslock','numlock','scrolllock'   Caps Lock,Num Lock和 Scroll Lock键'insert'                            Insert键'printscreen'                       Prtsc或Print Screen键'winleft','winright'                左右Win键(在windows上)'command'                           Command键(在OS X上)'option'                            Option键(在OS X上)

1.2 pyperclip

暂时用到pyperclip的这一个copy功能,其他不知
pyperclip.copy(con)
再配合pyautogui.hotkey('ctrl', 'v') 复制粘贴,可以将变量con储存的内容粘贴到某处

2. 给女神自动发多喝热水消息测试案例

pyautogui可以模拟人在图形界面移动、点击操作鼠标、键盘输入等行为,在成功尝试输入英文字符串后,发现这个库不能输入中文;

搜索一下,醒悟到可以用复制中文字符后粘贴的方式完成,于是用qq微信都做了测试:

在这里插入图片描述

代码如下,这个是最初学习的demo,后面还会做出更有意思的实用性的工具:

import time
import pyautogui
import pyperclipdef auto_send_msg():'''将qq/WX聊天框置顶放在屏幕右侧,程序界面缩小到可以触发为止,保证鼠标移动位置在输入框中即可'''pyautogui.moveTo(x=1100, y=400, duration=0.7)pyautogui.click(clicks=1, button='left', interval=0.05)         # 点击time.sleep(1)pyautogui.press('shift')    # shift 键切换英文pyautogui.typewrite(['t', 'e', 's', 't', 'left', 'left', 'left', 'left', 'M', 'S', 'G'], interval=.2)       # 英文输入pyautogui.press('end')      # end键pyautogui.press('enter')    # enter键pyautogui.hotkey('ctrl', 'enter')pyautogui.keyDown('w')pyautogui.press('shift')    # shift 键切换中文time.sleep(2)pyautogui.keyUp('w')pyautogui.hotkey('ctrl', 'enter')input_str = "/doge多喝热水(^U^)ノ~YO"for j in range(2):for con in input_str:pyperclip.copy(con)time.sleep(0.09)pyautogui.hotkey('ctrl', 'v')time.sleep(0.09)# pyautogui.press('enter')pyautogui.hotkey('ctrl', 'enter')if __name__ == "__main__":           auto_send_msg()

所用的屏幕属性如下:
在这里插入图片描述
qq摆放如下安排:
在这里插入图片描述

3. 知乎自动评论测试案例

在这里插入图片描述

import time
import pyautogui
import pyperclipdef send_zhihu_comment():print("屏幕像素为", pyautogui.size())time.sleep(1)pyautogui.moveTo(x=1100, y=400, duration=0.7)                 # 坐标移动pyautogui.click(clicks=1, button='left', interval=0.05)       # 点击pyautogui.moveRel(xOffset=-10, yOffset=-40)                   # 偏移移动pyautogui.click(clicks=1, button='left', interval=0.05)       # 点击pyautogui.middleClick()                                       # 单击中键pyautogui.moveRel(xOffset=10, yOffset=20)# 滚动测试time.sleep(.5)pyautogui.moveTo(x=1100, y=400, duration=0.7)pyautogui.click(clicks=1, button='left', interval=0.05)         # 点击time.sleep(.5)pyautogui.scroll(-100)time.sleep(.5)pyautogui.scroll(-100)time.sleep(.5)pyautogui.scroll(-100)# 左右键和拖动测试time.sleep(2)pyautogui.doubleClick()                                       # 双击左键time.sleep(1)pyautogui.rightClick()                                        # 单击右键pyautogui.dragTo(x=500, y=700, duration=1)# 输入评论,中文输入测试pyautogui.click(clicks=1, button='left', interval=0.05)         # 点击input_str = "up主真棒,加油!"for j in range(1):for con in input_str:pyperclip.copy(con)time.sleep(0.09)pyautogui.hotkey('ctrl', 'v')time.sleep(0.09)pyautogui.dragRel(xOffset=500, yOffset=-20, duration=1)pyautogui.click(clicks=1, button='left', interval=0.05)         # 点击pyautogui.moveRel(xOffset=-100, yOffset=-100)if __name__ == "__main__":send_zhihu_comment()     

4. 测试和gif效果

在这里插入图片描述
代码:

import time
import pyautogui
import pyperclipdef send_zhihu_comment():print("屏幕像素为", pyautogui.size())print("鼠标位置为", pyautogui.position())time.sleep(1)pyautogui.moveTo(x=1100, y=400, duration=0.7)                 # 坐标移动pyautogui.click(clicks=1, button='left', interval=0.05)       # 点击pyautogui.moveRel(xOffset=-10, yOffset=-40)                   # 偏移移动pyautogui.click(clicks=1, button='left', interval=0.05)       # 点击pyautogui.middleClick()                                       # 单击中键pyautogui.moveRel(xOffset=10, yOffset=20)# 滚动测试time.sleep(.5)pyautogui.moveTo(x=1100, y=400, duration=0.7)pyautogui.click(clicks=1, button='left', interval=0.05)         # 点击time.sleep(.5)pyautogui.scroll(-100)time.sleep(.5)pyautogui.scroll(-100)time.sleep(.5)pyautogui.scroll(-100)# 左右键和拖动测试time.sleep(2)pyautogui.doubleClick()                                       # 双击左键time.sleep(1)pyautogui.rightClick()                                        # 单击右键pyautogui.dragTo(x=500, y=700, duration=1)# 输入评论,中文输入测试pyautogui.click(clicks=1, button='left', interval=0.05)         # 点击input_str = "up主真棒,加油!"for j in range(1):for con in input_str:pyperclip.copy(con)time.sleep(0.09)pyautogui.hotkey('ctrl', 'v')time.sleep(0.09)pyautogui.dragRel(xOffset=500, yOffset=-20, button='left', duration=1)      # 按住左键相对拖动pyautogui.click(clicks=1, button='left', interval=0.05)         # 点击pyautogui.moveRel(xOffset=-100, yOffset=-100)def auto_send_msg():'''将qq/WX聊天框置顶放在屏幕右侧,程序界面缩小到可以触发为止,保证鼠标移动位置在输入框中即可'''pyautogui.moveTo(x=1100, y=400, duration=0.7)pyautogui.click(clicks=1, button='left', interval=0.05)         # 点击time.sleep(1)pyautogui.press('shift')    # shift 键切换英文pyautogui.typewrite(['t', 'e', 's', 't', 'left', 'left', 'left', 'left', 'M', 'S', 'G'], interval=.2)       # 英文输入pyautogui.press('end')      # end键pyautogui.press('enter')    # enter键pyautogui.hotkey('ctrl', 'enter')pyautogui.keyDown('w')pyautogui.press('shift')    # shift 键切换中文time.sleep(2)pyautogui.keyUp('w')pyautogui.hotkey('ctrl', 'enter')input_str = "多喝热水"for j in range(2):for con in input_str:pyperclip.copy(con)time.sleep(0.09)pyautogui.hotkey('ctrl', 'v')time.sleep(0.09)# pyautogui.press('enter')pyautogui.hotkey('ctrl', 'enter')if __name__ == "__main__":# send_zhihu_comment()# auto_send_msg()# print(pyautogui.mouseInfo())# pyautogui.moveTo(x=1227, y=329, duration=.5)# all_wins = pyautogui.getActiveWindowTitle()# print(all_wins)# TODO:根据图像进行定位完成和优化速度time.sleep(2)record_img = pyautogui.locateOnScreen("C:\\Users\\randolph\\Desktop\\record.png")pyautogui.moveTo(record_img, duration=.5)pyautogui.click(clicks=1, button='left', interval=0.05)time.sleep(2)# # 自动运行# run_img = pyautogui.locateOnScreen("C:\\Users\\randolph\\Desktop\\run.png")# print(run_img)# pyautogui.moveTo(run_img, duration=.5)# pyautogui.click(clicks=1, button='left', interval=0.05) # time.sleep(1)# 保存位置save_img = pyautogui.locateOnScreen("C:\\Users\\randolph\\Desktop\\save.png")print(save_img)pyautogui.moveTo(save_img, duration=.5)pyautogui.click(clicks=1, button='left', interval=0.05) time.sleep(3)# 是# yes_img = pyautogui.locateOnScreen("C:\\Users\\randolph\\Desktop\\yes.png")# print(yes_img)# pyautogui.moveTo(yes_img, duration=.5)# pyautogui.click(clicks=1, button='left', interval=0.05) # 测试案例auto_send_msg()time.sleep(2)# 停止记录stop_record_img = pyautogui.locateOnScreen("C:\\Users\\randolph\\Desktop\\stop_record.png")print(stop_record_img)pyautogui.moveTo(stop_record_img, duration=.5)pyautogui.click(clicks=1, button='left', interval=0.05) # 自动关闭stop_img = pyautogui.locateOnScreen("C:\\Users\\randolph\\Desktop\\stop.png")print(stop_img)pyautogui.moveTo(stop_img, duration=.5)pyautogui.click(clicks=1, button='left', interval=0.05) 

以下分别是windows环境下LICEcap截图工具、vscode按钮和我改成黑夜模式的系统按钮,用户可以根据自己的实际情况进行修改自定义~
record.png
在这里插入图片描述
run.png
在这里插入图片描述
stop.png
在这里插入图片描述
save.png
在这里插入图片描述
stop_record.png
在这里插入图片描述
yes.png
在这里插入图片描述

这篇关于pyautogui、pyperclip自动化模块基础及测试案例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/448918

相关文章

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.

Python实现Microsoft Office自动化的几种方式及对比详解

《Python实现MicrosoftOffice自动化的几种方式及对比详解》办公自动化是指利用现代化设备和技术,代替办公人员的部分手动或重复性业务活动,优质而高效地处理办公事务,实现对信息的高效利用... 目录一、基于COM接口的自动化(pywin32)二、独立文件操作库1. Word处理(python-d

Python使用date模块进行日期处理的终极指南

《Python使用date模块进行日期处理的终极指南》在处理与时间相关的数据时,Python的date模块是开发者最趁手的工具之一,本文将用通俗的语言,结合真实案例,带您掌握date模块的六大核心功能... 目录引言一、date模块的核心功能1.1 日期表示1.2 日期计算1.3 日期比较二、六大常用方法详

Python使用DrissionPage中ChromiumPage进行自动化网页操作

《Python使用DrissionPage中ChromiumPage进行自动化网页操作》DrissionPage作为一款轻量级且功能强大的浏览器自动化库,为开发者提供了丰富的功能支持,本文将使用Dri... 目录前言一、ChromiumPage基础操作1.初始化Drission 和 ChromiumPage

Python实现自动化表单填写功能

《Python实现自动化表单填写功能》在Python中,自动化表单填写可以通过多种库和工具实现,本文将详细介绍常用的自动化表单处理工具,并对它们进行横向比较,可根据需求选择合适的工具,感兴趣的小伙伴跟... 目录1. Selenium简介适用场景示例代码优点缺点2. Playwright简介适用场景示例代码

python中time模块的常用方法及应用详解

《python中time模块的常用方法及应用详解》在Python开发中,时间处理是绕不开的刚需场景,从性能计时到定时任务,从日志记录到数据同步,时间模块始终是开发者最得力的工具之一,本文将通过真实案例... 目录一、时间基石:time.time()典型场景:程序性能分析进阶技巧:结合上下文管理器实现自动计时

MySQL中实现多表查询的操作方法(配sql+实操图+案例巩固 通俗易懂版)

《MySQL中实现多表查询的操作方法(配sql+实操图+案例巩固通俗易懂版)》本文主要讲解了MySQL中的多表查询,包括子查询、笛卡尔积、自连接、多表查询的实现方法以及多列子查询等,通过实际例子和操... 目录复合查询1. 回顾查询基本操作group by 分组having1. 显示部门号为10的部门名,员