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: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测