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通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

Python get()函数用法案例详解

《Pythonget()函数用法案例详解》在Python中,get()是字典(dict)类型的内置方法,用于安全地获取字典中指定键对应的值,它的核心作用是避免因访问不存在的键而引发KeyError错... 目录简介基本语法一、用法二、案例:安全访问未知键三、案例:配置参数默认值简介python是一种高级编

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

HTML中meta标签的常见使用案例(示例详解)

《HTML中meta标签的常见使用案例(示例详解)》HTMLmeta标签用于提供文档元数据,涵盖字符编码、SEO优化、社交媒体集成、移动设备适配、浏览器控制及安全隐私设置,优化页面显示与搜索引擎索引... 目录html中meta标签的常见使用案例一、基础功能二、搜索引擎优化(seo)三、社交媒体集成四、移动

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基