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自动化模块基础及测试案例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/qq_33997198/article/details/107852367
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/448918

相关文章

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

Python logging模块使用示例详解

《Pythonlogging模块使用示例详解》Python的logging模块是一个灵活且强大的日志记录工具,广泛应用于应用程序的调试、运行监控和问题排查,下面给大家介绍Pythonlogging模... 目录一、为什么使用 logging 模块?二、核心组件三、日志级别四、基本使用步骤五、快速配置(bas

使用Python自动化生成PPT并结合LLM生成内容的代码解析

《使用Python自动化生成PPT并结合LLM生成内容的代码解析》PowerPoint是常用的文档工具,但手动设计和排版耗时耗力,本文将展示如何通过Python自动化提取PPT样式并生成新PPT,同时... 目录核心代码解析1. 提取 PPT 样式到 jsON关键步骤:代码片段:2. 应用 JSON 样式到

Spring Boot集成SLF4j从基础到高级实践(最新推荐)

《SpringBoot集成SLF4j从基础到高级实践(最新推荐)》SLF4j(SimpleLoggingFacadeforJava)是一个日志门面(Facade),不是具体的日志实现,这篇文章主要介... 目录一、日志框架概述与SLF4j简介1.1 为什么需要日志框架1.2 主流日志框架对比1.3 SLF4

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍... 目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Sprin

MySQL 复合查询案例详解

《MySQL复合查询案例详解》:本文主要介绍MySQL复合查询案例详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录基本查询回顾多表笛卡尔积子查询与where子查询多行子查询多列子查询子查询与from总结合并查询(不太重要)union基本查询回顾查询

MySQL复合查询从基础到多表关联与高级技巧全解析

《MySQL复合查询从基础到多表关联与高级技巧全解析》本文主要讲解了在MySQL中的复合查询,下面是关于本文章所需要数据的建表语句,感兴趣的朋友跟随小编一起看看吧... 目录前言:1.基本查询回顾:1.1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J1.2.按照部门

Python datetime 模块概述及应用场景

《Pythondatetime模块概述及应用场景》Python的datetime模块是标准库中用于处理日期和时间的核心模块,本文给大家介绍Pythondatetime模块概述及应用场景,感兴趣的朋... 目录一、python datetime 模块概述二、datetime 模块核心类解析三、日期时间格式化与

Python如何调用指定路径的模块

《Python如何调用指定路径的模块》要在Python中调用指定路径的模块,可以使用sys.path.append,importlib.util.spec_from_file_location和exe... 目录一、sys.path.append() 方法1. 方法简介2. 使用示例3. 注意事项二、imp