【GUI】自动化办公

目录

一、GUI介绍

二、环境安装

三、鼠标移动操作

四、鼠标点击操作

五、拖动鼠标

六、鼠标滚动操作

七、屏幕快照&图像识别基础

7.1 屏幕快照(截图)

7.2 图像识别

八、键盘控制


一、GUI介绍

  • GUI自动化就是写程序直接控制键盘和鼠标。这些程序可以控制其它应用,向它们发送虚拟的基键和鼠标点击,就像你自己坐在计算机前与应用交互一样。这种技术被称为“图形用户界面自动化”,或简称为“GUI自动化”。有了GUI自动化,你的程序就像活人用户坐在计算机前一样,能做任何事情,除了将咖啡泼在键盘上。
  • 也可以将GUI自动化看成是堆一个机械臂编程。你可以对机械臂编程,让它敲键盘或移动鼠标。对于涉及许多无脑点击或填表的任务,这种技术特别有用。

二、环境安装

pip install pyautogui

三、鼠标移动操作

我们主要学习如何利用pyautogui移动鼠标,追踪它在屏幕上的位置,但首先需要理解pyautogui如何处理坐标。

  • pyautogui坐标的处理
    • pyautogui的鼠标函数使用x、y坐标。原点的x、y都是零,在屏幕的左上角。向右x坐标增加,向下y坐标增加。所有坐标都是正整数,没有负数坐标。
  • 分辨率
    • 分辨率是屏幕的宽和高有多少像素。如果屏幕的分辨率设置为1920 x 1080,那么左上角的坐标是(0,0),右下角的坐标是(1919,1079)。
  • 编程获取电脑屏幕的宽和高的像素数
    • pyautogui.size() 函数返回两个整数的元组,包含屏幕的宽和高的像素数。
import pyautoguiwidth, height = pyautogui.size()
print(width, height) # 1920 1080
  • 移动鼠标
    • pyautogui.moveTo() 函数将鼠标立即移动到屏幕的指定位置
      • 表示x、y坐标的整数值分别构成了函数的第一个和第二个参数。
      • 可选的duration整数或浮点数关键字参数,指定了将鼠标移到目的位置所需的秒数。如果不指定,默认值是零,表示立即移动(在PyAutoGUI函数中,所有的duration关键字参数都是可选的)。
import pyautogui# 鼠标自动画个矩形移动,循环5次
for i in range(5):pyautogui.moveTo(100, 100, duration=0.25)pyautogui.moveTo(200, 100, duration=0.25)pyautogui.moveTo(200, 200, duration=0.25)pyautogui.moveTo(100, 200, duration=0.25)
  • pyautogui.moveRel() 函数相对于当前的位置移动鼠标
    • 该函数可以接受3个参数:向右水平移动多少个像素,向下垂直移动多少个像素,以及(可选的)花多少时间完成移动。为第一第二个参数提供负整数,鼠标将向左或向上移动。
import pyautogui# 鼠标自动画个矩形移动,循环5次
for i in range(5):pyautogui.moveRel(100, 0, duration=0.25)pyautogui.moveRel(0, 100, duration=0.25)pyautogui.moveRel(-100, 0, duration=0.25)pyautogui.moveRel(0, -100, duration=0.25)
  • 获取鼠标位置
    • 通过调用pyautogui.position() 函数,可以确定鼠标当前的位置。它将返回函数调用时,鼠标x、y坐标的元组。
import pyautoguiprint(pyautogui.position()) # Point(x=784, y=554)

四、鼠标点击操作

import pyautogui# 鼠标移动到屏幕左上角的位置,并点击一次。完整的“点击”是指按下鼠标按键,然后放开,同时不移动位置
pyautogui.click(10, 5)

指定鼠标按键:如果向指定鼠标按键,就加入 button 关键字参数,值分别为left、middle或right。例如:pyautogui.click(100, 150, button='left') 将在坐标(100,150)处点击鼠标左键。

import pyautogui# 鼠标右键点击
pyautogui.click(600, 500, button='right')

实现点击的其它方法:

  • mouseDown():只是按下鼠标按键
  • mouseUp():只是释放鼠标按键
  • doubleClick():执行双击鼠标左键
  • rightClick()、middleClick():分别执行双击右键和双击中键

五、拖动鼠标

“拖动” 意味着移动鼠标,同时按住一个按键不放。例如:可以通过拖动文件图标,在文件夹之间移动文件等。

PyAutoGUI提供了 pyautogui.dragTo() 和 pyautogui.dragRel()函数,将鼠标拖动到一个新的位置,或相对当前位置的位置。dragTo() 和 dragRel() 的参数与moveTo() 和 moveRel() 相同:x坐标/水平移动,y坐标/垂直移动,以及可选的时间间隔。

注意:测试这个功能我们可以打开windows的画图工具。

import pyautogui, timetime.sleep(2)
pyautogui.click()
distance = 200
while distance > 0:pyautogui.dragRel(distance, 0, duration=0.2, button='left')distance = distance - 5pyautogui.dragRel(0, distance, duration=0.2, button='left')pyautogui.dragRel(-distance, 0, duration=0.2, button='left')distance = distance - 5pyautogui.dragRel(0, -distance, duration=0.2, button='left')

六、鼠标滚动操作

滚动操作函数是scroll()。你向它提供一个整型参数,说明向上或向下滚动多少单位,滚动发生在鼠标的当前位置。

import pyautogui, timetime.sleep(2)
pyautogui.scroll(800)

七、屏幕快照&图像识别基础

你的 GUI 自动化程序没有必要盲目地点击和输入。pyautogui拥有屏幕快照的功能,可以根据当前屏幕的内容创建图形文件。

注意:在Linux计算机上,需要安装scrot程序,才能在pyautogui中使用屏幕快照功能。在终端窗口中,执行sudo apt-get install scrot,安装该程序。如果你使用Windows或OS X,就跳过这一步。

7.1 屏幕快照(截图)

要在python中获取屏幕快照,就调用pyautogui.screenshot() 函数,函数将返回包含一个屏幕快照的Image对象。

import pyautoguiim = pyautogui.screenshot()
im.save('./test.png')

Image对象getpixel()

  • getpixel() 函数传入坐标元组它将告诉你图像中这些坐标处的像素颜色。getpixel() 函数的返回值是一个RGB元组,包含4个整数,表示像素的红绿蓝值和透明度。
  • 这就是你的程序“看到”当前屏幕上内容的方法。
import pyautoguiim = pyautogui.screenshot()
im.getpixel((23, 56))

举个例子:

  • 假设你的 GUI 自动化程序中,有一步是点击灰色按钮。在调用 click()方法之前,你可以获取屏幕快照,查看脚本要点击处的像素。如果它的颜色和灰色按钮不一样,那么程序就知道出问题了。也许窗口发生了意外的移动,或者弹出式对话框挡住了该按钮。这时,不应该继续(可能会点击到错误的东西,造成严重破坏),程序可以“看到”它没有点击在正确的东西上,并自行停止。
  • pixelMatchesColor() 函数
    • 参数:
      • 第一和第二个参数是整数,对应 x 和 y 坐标。第三个参数是一个元组,包含3个整数,是屏幕像素必须匹配的RGB颜色
    • 返回值:
      • 如果屏幕上指定的 x、y坐标处的像素与指定的颜色匹配,PyAutoGUI的pixelMatchesColor()函数将返回True。
import pyautoguiim = pyautogui.screenshot()
print(im.getpixel((500, 200))) # (48, 49, 54)
result = pyautogui.pixelMatchesColor(500, 200, (248, 248, 248))
print(result) # False 说明不匹配

7.2 图像识别

opencv简介

  • opencv 是一个基于开源发行的跨平台计算机视觉库,它实现了图像处理和计算机视觉方面的很多通用算法,已成为计算机视觉领域最有力的研究工具。
  • 在这里我们要区分两个概念:图像处理和计算机视觉的区别:
    • 图像处理侧重于“处理”图像--如增强、还原、去噪、分隔等等;
    • 而计算机视觉重点在于计算机来模拟人的视觉,因此模拟才是计算机视觉领域的最终目标。
  • 环境安装:pip install opencv-python==3.4.5.20
  • 操作:打开腾讯会议,识别【加入会议】按钮,对其进行点击操作

import pyautogui
import cv2
import timetime.sleep(2)
# 获取带有腾讯会议的屏幕快照且保存到本地
im = pyautogui.screenshot()
im.save('screen.jpg')# 基于cv2读取照片
screen = cv2.imread('./screen.jpg')
joinMeeting = cv2.imread('./joinMeeting.jpg')
# 在屏幕快照中对比加入会议按钮照片,定位其准确位置
# result是一个二维列表,列表中最大值元素的位置就是我们对比后相似度最高的图片【最上角】位置
result = cv2.matchTemplate(joinMeeting, screen, cv2.TM_CCOEFF_NORMED)# minMaxLoc返回一个元组,其中三个元素,以此为最不相似点分数,最相似点分数,最不相似点位置坐标,最相似点位置坐标
pos_start = cv2.minMaxLoc(result)[3] # 获取最相似点相似坐标
print(pos_start)# 定位到点击图片的中间位置
x = int(pos_start[0]) + int(joinMeeting.shape[1] / 2)
y = int(pos_start[1]) + int(joinMeeting.shape[0] / 2)time.sleep(1)
pyautogui.click(x, y)

八、键盘控制

例1:在文件编辑器窗口中输入HelloWord!

import pyautogui
import timetime.sleep(2)
pyautogui.click(1300, 1300)
time.sleep(2)
pyautogui.typewrite('Hello world', interval=0.25)

例2:打印出美元字符(通过按住shift键并按4得到)

import pyautogui
import timetime.sleep(2)
pyautogui.keyDown('shift')
pyautogui.press('4')
pyautogui.keyUp('shift')

例3:热键组合,比如ctrl+v

import pyautogui
import timetime.sleep(2)
pyautogui.hotkey('ctrl', 'v')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/284521.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑如何关闭自启动应用?cmd一招解决问题

很多小伙伴说电脑刚开机就卡的和定格动画似的,cmd一招解决问题: CtrlR打开cmd,输入:msconfig 进入到这个界面: 点击启动: 打开任务管理器,禁用不要的自启动应用就ok了

【prometheus-operator】k8s监控集群外redis

1、部署exporter GitHub - oliver006/redis_exporter: Prometheus Exporter for Redis Metrics. Supports Redis 2.x, 3.x, 4.x, 5.x, 6.x, and 7.x redis_exporter-v1.57.0.linux-386.tar.gz # 解压 tar -zxvf redis_exporter-v1.57.0.linux-386.tar.gz # 启动 nohup ./redi…

SpringCloud-记

目录 什么是SpringCloud 什么是微服务 SpringCloud的优缺点 SpringBoot和SpringCloud的区别 RPC 的实现原理 RPC是什么 eureka的自我保护机制 Ribbon feigin优点 Ribbon和Feign的区别 什么是SpringCloud Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发…

力扣面试150 阶乘后的零 数论 找规律 质因数

Problem: 172. 阶乘后的零 思路 👨‍🏫 大佬神解 一个数末尾有多少个 0 ,取决于这个数 有多少个因子 10而 10 可以分解出质因子 2 和 5而在阶乘种,2 的倍数会比 5 的倍数多,换而言之,每一个 5 都会找到一…

AI时代Python金融大数据分析实战:ChatGPT让金融大数据分析插上翅膀

❤️作者主页:小虚竹 ❤️作者简介:大家好,我是小虚竹。2022年度博客之星评选TOP 10🏆,Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作…

电脑照片分辨率怎么调?这款dpi修改工具好用

许多考试平台在上传证件照片的时候,大多都会对图片分辨率有具体要求,但是如果遇上手上的图片分辨率达不到要求,那么怎么改图片分辨率呢?可以利用专业的dpi修改工具来处理,比如今天分享的就是一个在线修改图片分辨率的方…

唯众物联网安装调试员实训平台物联网一体化教学实训室项目交付山东技师学院

近日,山东技师学院物联网安装调试员实训平台及物联网一体化教学实训室采购项目已顺利完成交付并投入使用,标志着学院在物联网技术教学与实践应用方面迈出了坚实的一步。 山东技师学院作为国内知名的技师培养摇篮,一直以来致力于为社会培养高…

select , poll, epoll思维导图

目录 1. 总的框架结构 2. select 3. poll 4. epoll 1. 总的框架结构 2. select

自动驾驶轨迹规划之时空语义走廊(一)

欢迎大家关注我的B站: 偷吃薯片的Zheng同学的个人空间-偷吃薯片的Zheng同学个人主页-哔哩哔哩视频 (bilibili.com) 目录 1.摘要 2.系统架构 3.MPDM 4.时空语义走廊 ​4.1 种子生成 4.2 具有语义边界的cube inflation ​4.3 立方体松弛 本文解析了丁文超老师…

解决Animate.css动画效果无法在浏览器运行问题

背景 在开发官方网站的时候,临时更换了电脑,发现原本正常的动画效果突然不动了。 经过 chrome、Microsoft Edge都无法运行。 Animate.css | A cross-browser library of CSS animations. 问题排查 通过审查元素后发现类名是注入并且生效的。 验证 然…

视频素材库在哪里找无水印?推荐几个优质高清视频素材网

在探索创作无限可能的旅程中,每位视频创作者都渴望找到那些能够让作品生动起来、讲述更加动人故事的素材。为此,我继续为你介绍一系列的无水印高清素材网站,它们不仅能为你的视频添加视觉与听觉的魅力,还能帮助你以更高效的方式实…

阿里云2核4G服务器支持多少人在线?2C4G多少钱一年?

2核4G服务器支持多少人在线?阿里云服务器网账号下的2核4G服务器支持20人同时在线访问,然而应用不同、类型不同、程序效率不同实际并发数也不同,2核4G服务器的在线访问人数取决于多个变量因素。 阿里云2核4G服务器多少钱一年?2核4…

分布式ID生成方案总结

分布式场景下,需要保证每一个服务拿到的id是唯一的。本文讨论、分析、总结了一些常见的分布式ID生成方案 结论:技术上没有银弹,每种分布式id都有自己的使用场景。uuid适用于业务比较简单,对性能没有太高追求等。 目前主流是 基于数…

Linux V4L2 应用编程

V4L2:Video4Linux2,是 Linux 内核中的一个框架,提供了一套用于视频设备驱动程序开发的 API。它是一个开放的、通用的、模块化的视频设备驱动程序框架,允许 Linux 操作系统和应用程序与各种视频设备(如摄像头、视频采集…

【NLP笔记】RNN总结

文章目录 经典RNN单向RNN双向RNNDeep RNNRNN特性总结 变体RNNLSTMGRU 参考及转载内容: 循环神经网络(RNN)深度学习05-RNN循环神经网络完全理解RNN(循环神经网络) 传统的CNN(Covolutional Neural Network&am…

【异或】Leetcode 136. 只出现一次的数字

【异或】Leetcode 136. 只出现一次的数字 解法1 只需要全部异或一下,剩下的就是剩下的元素 ---------------🎈🎈题目链接 136. 只出现一次的数字🎈🎈------------------- 解法1 只需要全部异或一下,剩下的…

【GitHub】2FA(双重身份验证)

无需额外设备完美插件处理:Authenticator Crx搜搜:https://www.crxsoso.com/ 或者google查询:Authenticator

BRAM底层原理详细解释(1)

目录 一、原语 二、端口简述 2.1 端口简介 2.2 SDP端口映射 三、端口信号含义补充说明 3.1 字节写使能(Byte-Write Enable)- WEA and WEBWE: 3.2 地址总线—ADDRARDADDR and ADDRBWRADDR 3.3 数据总线—DIADI, DIPADIP, DIBDI, and D…

(一)、Doris安装使用(基于Doris 2.0.6)

第 1 章Doris简介 1.1、 Doris 概述 ​ Apache Doris由百度大数据部研发(之前叫百度 Palo,2018年贡献到 Apache 社区后,更名为 Doris),在百度内部,有超过200个产品线在使用,部署机器超过1000台…

RHEL9部署Docker环境

华子目录 Docker引擎架构docker引擎架构示意图执行过程示例 RHEL9上安装Docker1.系统要求2.安装yum-utils工具包3.yum安装docker-ce4.配置docker镜像加速docker拉取镜像的过程配置阿里云镜像仓库重新加载守护进程重启Docker服务 5.拉取并运行hello-world镜像6.测试是否安装成功…