iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >让所有GUI都自动化-PyAutoGUI(GUI自动化工具)
  • 826
分享到

让所有GUI都自动化-PyAutoGUI(GUI自动化工具)

自动化python运维 2023-09-04 06:09:04 826人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录 1、前言 2、简介 3、安装 4、常用函数 5、保护措施 6、鼠标函数 7、键盘函数 8、消息弹窗函数 9、截屏函数 ‍10、示例 1、前言 在使用 selenium 进行自动化测试时,鼠标事件可以用 ActionChains 类

目录

1、前言

2、简介

3、安装

4、常用函数

5、保护措施

6、鼠标函数

7、键盘函数

8、消息弹窗函数

9、截屏函数

‍10、示例


1、前言

在使用 selenium 进行自动化测试时,鼠标事件可以用 ActionChains 类,键盘事件可以用 Keys 类。本篇将介绍一款自动化工具-PyAutoGUI,除了可以满足鼠标、键盘事件操作外,还可以进行消息弹窗、截屏等操作。

2、简介

PyAutoGUI 是一个纯 python 的 GUI 自动化工具,其目的是可以用程序自动控制鼠标和键盘操作,多平台支持(windowsMacOS,linux),并在 Python 2 和 3 上运行。

PyAutoGUI 可以模拟鼠标的移动、点击、拖拽,键盘按键输入、按住操作,以及鼠标+键盘的热键同时按住等操作,可以说手能动的都可以。

PyAutoGUI 有几个特点:

移动鼠标并单击其他应用程序的窗口。

向应用程序发送点击输入(例如,填写表格)。

截取屏幕截图,并给出一个图像(例如,一个按钮或复选框),然后在屏幕上找到它。

找到应用程序的窗口,然后移动、调整大小、最大化、最小化或关闭它(目前仅限 Windows)。

显示警报和消息框。

GitHub地址:

https://github.com/asweigart/pyautogui

3、安装

Windows 环境下

PyAutoGUI 没有任何依赖,因为它用 Python 的 ctypes 模块,所以不需要 pywin32。

pip3 install pyautogui

macOS 环境下

PyAutoGUI 需要 PyObjC 运行 AppKit 和 Quartz 模块。

sudo pip3 install pyobjc-coresudo pip3 install pyobjcsudo pip3 install pyautogui

Linux 环境下

PyAutoGUI 需要 python-xlib(Python 2)、python3-Xlib(Python 3)

sudo pip3 install python3-xlibsudo apt-get scrotsudo apt-get install python-tksudo apt-get install python3-devsudo pip3 install pyautogui

4、常用函数

position():返回整数元组 (x, y),分别表示鼠标光标所在位置的 XY 轴坐标。

size():返回显示器的尺寸整数元组 (x, y)。

onScreen():要检查 XY 坐标是否在屏幕上,需要用此函数来检验,如果在屏幕上返回 True,否则返回 False。

获取当前鼠标的坐标

#!/usr/bin/env python# -*- coding: utf-8 -*-# 公众号:AllTests软件测试import pyautoguiprint(pyautogui.position())

运行结果:

获取当前屏幕的分辨率(宽度和高度)

#!/usr/bin/env python# -*- coding: utf-8 -*-# 公众号:AllTests软件测试import pyautoguiprint(pyautogui.size())

运行结果:

判断坐标是否在屏幕上

#!/usr/bin/env python# -*- coding: utf-8 -*-# 公众号:AllTests软件测试import pyautoguix, y = 500, 600print(pyautogui.onScreen(x, y))

运行结果:

5、保护措施

PAUSE 方法可以进行增加延迟时间,例如 3.5 秒。

#!/usr/bin/env python# -*- coding: utf-8 -*-# 公众号:AllTests软件测试import pyautoguipyautogui.PAUSE = 3.5

6、鼠标函数

屏幕位置使用 X 和 Y 轴的笛卡尔坐标系。

原点 (0,0) 在左上角,分别向右、向下增大。

如果屏幕像素是 1920*1080,那么右下角的坐标是 (1919, 1079)。

moveTo():函数会把鼠标光标移动到指定的 XY 轴坐标处。如果传入 None 值,则表示使用当前光标的对象轴坐标值。

moveRel():如果你想让光标以当前位置为原点,进行相对移动,就用此函数。

dragTo() 和 dragRel():函数与 moveTo() 和 moveRel() 函数类似。另外,他们有一个 button 参数可以设置成 left,middle 和 right 三个键。

click():函数模拟单击鼠标左键一次的行为。参数可以设置,其中,button 属性可以设置成 left,middle 和 right。

doubleClick(),tripleClick() 和 rightClick():函数来实现双击、三击和右击操作。

mouseDown() 和 mouseUp():函数可以实现鼠标按下和鼠标松开的操作。两者参数相同,有 x,y 和 button。

scroll():函数控制鼠标滚轮的滚动,amount_to_scroll 参数表示滚动的格数。正数则页面向上滚动,负数则向下滚动。

鼠标移动

#!/usr/bin/env python# -*- coding: utf-8 -*-# 公众号:AllTests软件测试import pyautoguinum_seconds = 1.2# 用num_seconds秒的时间把光标移动到(x, y)位置pyautogui.moveTo(x, y, duration=num_seconds)# 用num_seconds秒的时间把光标的# X轴(水平)坐标移动xOffset,# Y轴(竖直)坐标向下移动yOffset。xOffset, yOffset = 50, 100pyautogui.moveRel(xOffset, yOffset, duration=num_seconds)

鼠标移动(缓动/渐变)- 改变光标移动过程的速度和方向。通常鼠标是匀速直线运动的。

# 开始很慢,不断加速pyautogui.moveTo(100, 100, 2, pyautogui.easeInQuad)# 开始很快,不断减速pyautogui.moveTo(100, 100, 2, pyautogui.easeOutQuad)# 开始和结束都快,中间比较慢pyautogui.moveTo(100, 100, 2, pyautogui.easeInOutQuad)# 一步一徘徊前进pyautogui.moveTo(100, 100, 2, pyautogui.easeInBounce)# 徘徊幅度更大,甚至超过起点和终点pyautogui.moveTo(100, 100, 2, pyautogui.easeInElastic)

鼠标拖拽

# 按住鼠标左键,把鼠标拖拽到(100, 200)位置pyautogui.dragTo(100, 200, button='left')# 按住鼠标左键,用2秒钟把鼠标拖拽到(300, 400)位置pyautogui.dragTo(300, 400, 2, button='left')# 按住鼠标右键,用2秒钟把鼠标拖拽到(30,0)位置pyautogui.dragTo(30, 0, 2, button='right')

鼠标点击

# 先移动到(100, 200)再单击pyautogui.click(x=100, y=200, duration=2)# 右键pyautogui.click(button='right')# 双击左键pyautogui.click(clicks=2)# 两次单击之间停留0.25秒pyautogui.click(clicks=2, interval=0.25)# 三击右键pyautogui.click(button='right', clicks=2, interval=0.25)

鼠标按下和鼠标松开

# 鼠标左键按下再松开pyautogui.mouseDown(); pyautogui.mouseUp()# 按下鼠标右键pyautogui.mouseDown(button='right')# 移动到(100, 200)位置,然后松开鼠标右键pyautogui.mouseUp(button='right', x=100, y=200)

鼠标滚动

# 向上滚动10格pyautogui.scroll(10)# 向下滚动10格pyautogui.scroll(-10)# 移动到(100, 100)位置再向上滚动10格pyautogui.scroll(10, x=100, y=100)

7、键盘函数

typewrite():函数可以实现字符输入。要在两次输入间增加时间间隔,可以用 interval 参数。此函数只能用于单个字符键,不能按 SHITF 和 F1 这些功能键。

KEYBOARD_KEYS:获取按键名称。

press():函数把 pyautogui.KEYBOARD_KEYS 里面按键对应的字符串输入进去。

hoTKEy():函数来绑定若干键盘热键。像 Ctrl-S 或 Ctrl-Shift-1 都可以用此函数来实现。

键盘输入

# 输入Hello world!pyautogui.typewrite('Hello world!')# 每次输入间隔0.25秒,输入Hello world!pyautogui.typewrite('Hello world!', interval=0.25)# 多个键也可以pyautogui.typewrite(['a', 'b', 'c', 'left', 'backspace', 'enter', 'f1'], interval=0.5)

按键名称

#!/usr/bin/env python# -*- coding: utf-8 -*-# 公众号:AllTests软件测试import pyautoguiprint(pyautogui.KEYBOARD_KEYS)

运行结果:

键盘按键

# ENTER键pyautogui.press('enter')# F1键pyautogui.press('f1')# 左方向键pyautogui.press('left')# 用数组把一组键传入pyautogui.press(['left', 'left', 'left'])

press() 函数其实是 keyDown() 和 keyUp() 函数的包装,模拟的按下然后松开两个动作。这两个函数可以单独调用。

例如,按下 shift 键的同时按3次左方向键。每个按键的按下和松开也可以单独调用。

# 按下`shift`键pyautogui.keyDown('shift')pyautogui.press('left')pyautogui.press('left')pyautogui.press('left')# 松开`shift`键pyautogui.keyUp('shift')

键盘热键

pyautogui.hotkey('ctrl', 'a') # 全选pyautogui.hotkey('ctrl', 'c') # 复制pyautogui.hotkey('ctrl', 'v') # 粘贴

8、消息弹窗函数

如果你需要消息弹窗,通过单击 OK 暂停程序,或者向用户显示一些信息,消息弹窗函数就会有类似javascript 的功能。

alert():函数显示一个简单的带文字和 OK 按钮的消息弹窗。用户点击后返回 button 的文字。

confirm():函数显示一个简单的带文字、OK 和 Cancel 按钮的消息弹窗,用户点击后返回被点击 button 的文字,支持自定义数字、文字的列表。

prompt():函数可以输入的消息弹窗,带 OK 和 Cancel 按钮。用户点击 OK 按钮返回输入的文字,点击 Cancel 按钮返回 None。

password():函数样式同 prompt(),用于输入密码,消息用 * 表示。带 OK 和 Cancel 按钮。用户点击 OK 按钮返回输入的文字,点击 Cancel 按钮返回 None。

alert() 函数

#!/usr/bin/env python# -*- coding: utf-8 -*-# 公众号:AllTests软件测试import pyautoguipyautogui.alert(text='点击OK按钮', title='alert()函数', button='OK')

运行结果:

confirm() 函数

(1)OK 和 Cancel 按钮的消息弹窗

#!/usr/bin/env python# -*- coding: utf-8 -*-# 公众号:AllTests软件测试import pyautoguipyautogui.confirm(text='点击OK或Cancel按钮', title='confirm()函数', buttons=['OK', 'Cancel'])

运行结果:

(2)10 个按键 0-9 的消息弹窗

#!/usr/bin/env python# -*- coding: utf-8 -*-# 公众号:AllTests软件测试import pyautoguipyautogui.confirm(text='点击0到9按钮', title='confirm()函数', buttons=range(10))

运行结果:

prompt() 函数

#!/usr/bin/env python# -*- coding: utf-8 -*-# 公众号:AllTests软件测试import pyautoguipyautogui.prompt(text='输入消息弹窗', title='prompt()函数', default='用户点击OK')

运行结果:

password() 函数

#!/usr/bin/env python# -*- coding: utf-8 -*-# 公众号:AllTests软件测试import pyautoguipyautogui.password(text='输入消息弹窗', title='password()函数', default='用户点击OK', mask='*')

运行结果:

9、截屏函数

PyAutoGUI 用 Pillow/PIL 库实现图片相关的识别和操作。

在 Linux 里面,你必须执行 sudo apt-get install scrot 来使用截屏特性。

截屏

#!/usr/bin/env python# -*- coding: utf-8 -*-# 公众号:AllTests软件测试import pyautogui# 返回一个Pillow/PIL的Image对象pyautogui.screenshot()pyautogui.screenshot('Desktop.png')

运行结果:

如果你不需要截取整个屏幕,还有一个可选的 region 参数。你可以把截取区域的左上角 XY 坐标值和宽度、高度传入截取。

im = pyautogui.screenshot(region=(0,0,300,400))

如果你有一个图片文件想在上面做点击操作,你可以用 locateOnScreen() 函数来定位。

# 返回(最左x坐标,最顶y坐标,宽度,高度)pyautogui.locateOnScreen('pyautogui/looks.png')

locateAllOnScreen() 函数会寻找所有相似图片,返回一个生成器。

for i in pyautogui.locateAllOnScreen('pyautogui/looks.png'):    print(i)
list(pyautogui.locateAllOnScreen('pyautogui/looks.png'))

locateCenterOnScreen() 函数会返回图片在屏幕上的中心 XY 轴坐标值。

pyautogui.locateCenterOnScreen('pyautogui/looks.png')

‍10、示例

使用 Selenium 打开 Chrome 浏览器,访问百度首页,输入关键字进行查询,之后向下滚动后再进行截屏的一系列操作。

由于 PyAutoGUI 不支持中文输入,这里使用 pyperclip 库,采用“复制粘贴”的方式来输入中文。

注:由于作者是 macOS 环境下运行,ctrl+v 粘贴则是 command+v。

#!/usr/bin/env python# -*- coding: utf-8 -*-# 公众号:AllTests软件测试import timeimport pyperclipimport pyautoguifrom selenium import WEBdriverfrom selenium.webdriver.common.by import Byclass TestMyTest():    def setup_method(self):        self.driver = webdriver.Chrome()        self.pyautogui = pyautogui        self.pyperclip = pyperclip    def teardown_method(self):        self.driver.quit()    def test_myTest(self):        self.driver.get("Https://www.baidu.com/")        time.sleep(2)        self.pyautogui.typewrite('pyautogui', interval=0.25)        time.sleep(2)        self.pyperclip.copy("自动化测试")        time.sleep(2)        self.pyautogui.hotkey('command', 'v')        time.sleep(2)        self.driver.find_element(By.ID, "su").click()        time.sleep(2)        self.pyautogui.scroll(-10)        time.sleep(2)        self.pyautogui.screenshot('Desktop.png')

精彩推荐

面试笔试系列

思维导图系列

Linux常用命令壁纸

接口Requests系列

测试框架pytest系列

Jmeter快速上手之接口测试

自动化测试框架结构图

移动安全框架(MobSF)

来源地址:https://blog.csdn.net/wangmcn/article/details/126665946

--结束END--

本文标题: 让所有GUI都自动化-PyAutoGUI(GUI自动化工具)

本文链接: http://www.lsjlt.com/news/393027.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 让所有GUI都自动化-PyAutoGUI(GUI自动化工具)
    目录 1、前言 2、简介 3、安装 4、常用函数 5、保护措施 6、鼠标函数 7、键盘函数 8、消息弹窗函数 9、截屏函数 ‍10、示例 1、前言 在使用 Selenium 进行自动化测试时,鼠标事件可以用 ActionChains 类...
    99+
    2023-09-04
    自动化 python 运维
  • Windows GUI自动化控制工具之python uiAutomation
    对 Windows GUI进行自动化控制的工具有很多,比如pywinauto、pyautogui、pywin32、Autoit、airtest、UIAutomation等,UI Automation ...
    99+
    2023-09-01
    自动化 python uiautomation windows gui 自动化
  • Python自动操作 GUI 神器——PyAutoGUI
    我们以前讲过怎样使用 Python 在浏览器中实现页面自动化操作,不管用哪种方式实现,都是通过定位页面中的元素来进行相应的操作。今天我们来聊一聊如何在桌面实现自动化操作。与浏览器页面自动化操作类似,桌面自动化操作也是需要定位鼠标在桌面的位置...
    99+
    2023-05-14
    Python GUI PyAutoGUI
  • Python自动操作GUI之PyAutoGUI怎么使用
    本篇内容主要讲解“Python自动操作GUI之PyAutoGUI怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python自动操作GUI之PyAutoGUI怎么使用”吧!GUI控制神器我...
    99+
    2023-07-02
  • Python自动操作GUI神器PyAutoGUI怎么使用
    本篇内容介绍了“Python自动操作GUI神器PyAutoGUI怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!GUI 控制神器我们今...
    99+
    2023-07-06
  • python自动化神器:pyautogui
    详情可访问:pyautogui官网地址,关注本专栏,学习自动发消息给对象 文章目录 一、pyautogui是什么?二、使用步骤1.安装和引入库2.基本操作(1)鼠标控制(2)键盘控制(3...
    99+
    2023-09-17
    python 自动化
  • Ansible自动化运维工具
    文章目录 一.Ansible自动化运维工具介绍1.Ansible简介2.Ansible特点及优势(1)特点(2)优点 3.Ansible核心程序4.Ansible工作原理及流程 二.部署Ansible自动化运维工具1.管理...
    99+
    2023-08-30
    运维 ansible 自动化
  • web自动化测试工具有哪些
    以下是一些常见的Web自动化测试工具:1. Selenium:一个流行的Web自动化测试框架,支持多种编程语言,包括Java、Pyt...
    99+
    2023-09-13
    web
  • python 自动化部署工具-fabri
    今天闲来无事,来介绍一下利用fabric 来部署代码包。 安装 pip install fabric fabric 默认引用fafile.py,指定执行文件加参数-f,如:fab -H 127.0.0.1 -f fabtest.py te...
    99+
    2023-01-31
    工具 python fabri
  • python 自动化部署工具Fabric
    自动化部署工具Fabric简介    Fabric就是一个帮助我们在上线时减少重复/繁琐操作的自动化部署利器,对于缺乏成熟运维平台的众多小公司的运维或开发人员来说,掌握这个工具是有必要的。1. Fabric是什么Fabric官方文档的描述如...
    99+
    2023-01-31
    工具 python Fabric
  • PHP 函数性能优化自动化工具
    php函数性能优化自动化工具通过分析函数性能,帮助快速识别和修复性能瓶颈。工具可用composer安装,并可通过functionprofiler类进行使用。分析结果包括函数执行时间、内存...
    99+
    2024-04-11
    分析 php composer
  • Python进行自动化测试工具
    在自动化测试里Python用途很广,但是市面上测试工具不是很多,这里主要介绍的是一些Python测试的框架1、单元测试a、unittest、doctest:Python自带的单元测试框架b、pyunit:Junit的Python版本c、py...
    99+
    2023-01-31
    测试工具 Python
  • PHP中的测试自动化工具
    随着软件开发领域不断发展,测试自动化工具也日益受到关注和重视。而对于PHP开发人员来说,如何使用测试自动化工具来提高代码的质量呢?本文将介绍一些常用的PHP测试自动化工具,包括PHPUnit、Codeception和Behat,并讨论它们各...
    99+
    2023-05-23
    自动化测试 测试工具 PHP测试
  • 自动化运维工具Ansible之Pytho
    Ansible 的Python API使用起来相当简单快捷,使用API可以将某些运维操作封装成一个带有WEB界面的操作,免去了每次执行某个操作的时候都需要SSH运行Ansible命令。官方给出的一个简单示例:import ansible.r...
    99+
    2023-01-31
    工具 Ansible Pytho
  • oracle自带工具(自动优化sql小助手)
    1.drop tuning task if task exists (删除之前的优化任务,如果存在的话) sqlplus / as sysdba ...
    99+
    2024-04-02
  • web自动化测试工具Pyppeteer有什么用
    小编给大家分享一下web自动化测试工具Pyppeteer有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!01.Pyppeteer简介介绍Pyppeteer之...
    99+
    2023-06-02
  • Python-GUI wxPython之自动化数据生成器的项目实战
    目录学习目标界面原型设计使用技术:学习目标 根据原型设计编译自动化数据生成器,熟悉wxPython的基本用法。 界面原型设计 界面原型设计分析 输入参数: 最大长度最小长度组成规则...
    99+
    2024-04-02
  • python游戏测试工具自动化遍历游戏中所有关卡
    目录场景思路实现细节1.卡住的判定和处理2.GAutomator 调用游戏内部的 GM 指令unity 中:python 中:3.最终输出的报告详细代码AutoBattleTest....
    99+
    2024-04-02
  • python制作可视化GUI界面自动分类管理文件
    目录不同的文件后缀归类为不同的类别output效果图经常杂乱无章的文件夹会让我们找不到所想要的文件,因此我特意制作了一个​​可视化GUI界面​​,通过输入路径一键点击实现文件分门别类...
    99+
    2024-04-02
  • XSS漏洞自动化攻击工具XSSer
    XSS漏洞自动化攻击工具XSSer...
    99+
    2023-06-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作