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

相关文章

Node.js net模块的使用示例

《Node.jsnet模块的使用示例》本文主要介绍了Node.jsnet模块的使用示例,net模块支持TCP通信,处理TCP连接和数据传输,具有一定的参考价值,感兴趣的可以了解一下... 目录简介引入 net 模块核心概念TCP (传输控制协议)Socket服务器TCP 服务器创建基本服务器服务器配置选项服

Python自动化处理手机验证码

《Python自动化处理手机验证码》手机验证码是一种常见的身份验证手段,广泛应用于用户注册、登录、交易确认等场景,下面我们来看看如何使用Python自动化处理手机验证码吧... 目录一、获取手机验证码1.1 通过短信接收验证码1.2 使用第三方短信接收服务1.3 使用ADB读取手机短信1.4 通过API获取

Rust中的Drop特性之解读自动化资源清理的魔法

《Rust中的Drop特性之解读自动化资源清理的魔法》Rust通过Drop特性实现了自动清理机制,确保资源在对象超出作用域时自动释放,避免了手动管理资源时可能出现的内存泄漏或双重释放问题,智能指针如B... 目录自动清理机制:Rust 的析构函数提前释放资源:std::mem::drop android的妙

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

Python自动化Office文档处理全攻略

《Python自动化Office文档处理全攻略》在日常办公中,处理Word、Excel和PDF等Office文档是再常见不过的任务,手动操作这些文档不仅耗时耗力,还容易出错,幸运的是,Python提供... 目录一、自动化处理Word文档1. 安装python-docx库2. 读取Word文档内容3. 修改

Python自动化办公之合并多个Excel

《Python自动化办公之合并多个Excel》在日常的办公自动化工作中,尤其是处理大量数据时,合并多个Excel表格是一个常见且繁琐的任务,下面小编就来为大家介绍一下如何使用Python轻松实现合... 目录为什么选择 python 自动化目标使用 Python 合并多个 Excel 文件安装所需库示例代码

SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程

《SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程》本文详细介绍了如何在虚拟机和宝塔面板中安装RabbitMQ,并使用Java代码实现消息的发送和接收,通过异步通讯,可以优化... 目录一、RabbitMQ安装二、启动RabbitMQ三、javascript编写Java代码1、引入

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多