python自动化办公--pyautogui控制鼠标和键盘操作

news2024/11/24 1:31:58

在公司某些工作场景下,需要大量重复的工作,重复的工作完全可以通过python软件的自动化实现,省时省力。本文分享python自动化办公的利器之一--pyautogui,通过pyautogui可以轻松控制鼠标和键盘操作。


PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序自动控制鼠标和键盘操作,多平台支持(Windows,OS X,Linux)。


1、安装

pip3 install pyautogui
复制代码

2、pyautogui鼠标操作样例



import pyautogui
# 获取当前屏幕分辨率
screenWidth, screenHeight = pyautogui.size()
# 获取当前鼠标位置
currentMouseX, currentMouseY = pyautogui.position()
 
# 2秒钟鼠标移动坐标为100,100位置  绝对移动
pyautogui.moveTo(x=100, y=100,duration=2, tween=pyautogui.linear)
 
#鼠标移到屏幕中央。
pyautogui.moveTo(screenWidth / 2, screenHeight / 2)
 
# 鼠标左击一次
#pyautogui.click()
# x 
# y 
# clicks 点击次数
# interval点击之间的间隔
# button 'left', 'middle', 'right' 对应鼠标 左 中 右或者取值(1, 2, or 3)
# tween 渐变函数
pyautogui.click(x=None, y=None, clicks=1, interval=0.0, button='left', duration=0.0, tween=pyautogui.linear)
 
# 鼠标相对移动 ,向下移动
#pyautogui.moveRel(None, 10)
pyautogui.moveRel(xOffset=None, yOffset=10,duration=0.0, tween=pyautogui.linear)
 
 
# 鼠标当前位置0间隔双击
#pyautogui.doubleClick()
pyautogui.doubleClick(x=None, y=None, interval=0.0, button='left', duration=0.0, tween=pyautogui.linear)
 
# 鼠标当前位置3击
#pyautogui.tripleClick()
pyautogui.tripleClick(x=None, y=None, interval=0.0, button='left', duration=0.0, tween=pyautogui.linear)
 
#右击
pyautogui.rightClick()
 
#中击
pyautogui.middleClick()
 
#  用缓动/渐变函数让鼠标2秒后移动到(500,500)位置
#  use tweening/easing function to move mouse over 2 seconds.
pyautogui.moveTo(x=500, y=500, duration=2, tween=pyautogui.easeInOutQuad)
 
#鼠标拖拽
pyautogui.dragTo(x=427, y=535, duration=3,button='left')
 
#鼠标相对拖拽
pyautogui.dragRel(xOffset=100,yOffset=100,duration=,button='left',mouseDownUp=False)
 
#鼠标移动到x=1796, y=778位置按下
pyautogui.mouseDown(x=1796, y=778, button='left')
 
#鼠标移动到x=2745, y=778位置松开(与mouseDown组合使用选中)
pyautogui.mouseUp(x=2745, y=778, button='left',duration=5)
 
#鼠标当前位置滚轮滚动
pyautogui.scroll()
#鼠标水平滚动(Linux)
pyautogui.hscroll()
#鼠标左右滚动(Linux)
pyautogui.vscroll()
复制代码

3、pyautogui键盘操作样例

#模拟输入信息
pyautogui.typewrite(message='Hello world!',interval=0.5)
#点击ESC
pyautogui.press('esc')
# 按住shift键
pyautogui.keyDown('shift')
# 放开shift键
pyautogui.keyUp('shift')
# 模拟组合热键
pyautogui.hotkey('ctrl', 'c')
复制代码

4、按键支持

按键说明
enter(或return 或 \n)回车
escESC键
shiftleftshiftright左右SHIFT键
altleftaltright左右ALT键
ctrlleftctrlright左右CTRL键
tab (\t)TAB键
backspacedeleteBACKSPACE 、DELETE键
pageuppagedownPAGE UP 和 PAGE DOWN键
homeendHOME 和 END键
updownleft,right箭头键
f1f2f3….F1…….F12键
volumemutevolumedown,volumeup有些键盘没有
pausePAUSE键
capslocknumlock,scrolllockCAPS LOCK, NUM LOCK, 和 SCROLLLOCK 键
insertINS或INSERT键
printscreenPRTSC 或 PRINT SCREEN键
winleftwinrightWin键
commandMac OS X command键

5、截屏

5.1、整个屏幕截图并保存

im1 = pyautogui.screenshot()
im1.save('my_screenshot.png') 
im2 = pyautogui.screenshot('my_screenshot2.png')
复制代码

5.2、屏幕查找图片位置并获取中间点

#在当前屏幕中查找指定图片(图片需要由系统截图功能截取的图)
coords = pyautogui.locateOnScreen('folder.png')#获取定位到的图中间点坐标x,y=pyautogui.center(coords)#右击该坐标点
pyautogui.rightClick(x,y)
复制代码

6、安全设置

import pyautogui #保护措施,避免失控
pyautogui.FAILSAFE = True
#为所有的PyAutoGUI函数增加延迟。默认延迟时间是0.1秒。
pyautogui.PAUSE = 0.5
复制代码

7、实例说明(仅供学习)

7.1、需求场景

大量的windows端上使用某公司的代理软件,不时会出现不可用的情况,多次反馈某公司无果,可又不能不用,只能是定期去重启一下。

7.2、思路

使用Python的pyautogui模块替代手动登陆。

7.3、实践

1、由于国际链路问题,往往不能一次就成功登陆。再打开软件时和点击登陆时均可能出现几次不等的登陆失败提示,需要点击OK按钮确认。

2、程序会尝试进行五轮的登陆操作(使用对应的阶段的图片),期间检测到成功登陆则退出。

3、建脚本加入到开机启动(至于重启windows的任务就交给Ansible,将再其他文章进行详细说明)


# -*- coding: utf-8 -*-
import os
import time
import subprocess
import pyautogui


def kill_proc(description, proc_name):
    try:
        print('终止%s进程...' % (description))
        os.system('taskkill /IM %s /F' % (proc_name))
    except Exception as reason:
        print(e)
        
def run_proc(description, proc_name):
    try:
        print('启动%s进程...' % (description))
        subprocess.Popen("%s" % (proc_name))
        time.sleep(8)
    except Exception as reason:
        print('启动进程失败!!\n错误的原因是:' + str(reason))
        os._exit(0)
        
def check_img(description, img_name):
    try:
        print('查找%s图像' % (description))
        button = pyautogui.locateOnScreen("%s" % (img_name))
        print(button)
        if description == 'Success':
            return 1
        if button:
            print('点击%s图像' % (description))
            button_center = pyautogui.center(button)
            pyautogui.click(button_center)
            time.sleep(1)
    except BaseException:
        print('没有找到%s图像' % (description))
        return 0
        
if __name__ == '__main__':
    count = 1
    kill_proc('911', 'Client.exe')
    run_proc('911', 'Client.exe')
    for i in range(5):
        print('=====进行第%s轮检查=====' % (count))
        count += 1
        check_img('OK1', 'C:\\error_OK1.PNG')
        check_img('OK2', 'C:\\error_OK2.PNG')
        check_img('Login', 'C:\\Login.PNG')
        time.sleep(5)
        if check_img('Success', 'C:\\success.PNG'):
            print('执行成功!!')
            break
复制代码

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

纯滞后系统的大林控制算法

大林控制算法原理早在1968年,美国IBM公司的大林(Dahlin)就提出了一种不同于常规PID控制规律的新型算法,即大林算法。该算法的最大特点是将期望的闭环响应设计成一阶惯性加纯延迟,然后反过来得到能满足这种闭环响应的控…

Linux服务器之间设置共享目录

前言有时候我们需要在两台linux服务器之间共享资源,例如在服务器A上面部署了一个大文件上传程序,但是需要将文件上传到服务器B的某个目录下面,因为上传大文件,需要先将文件所有分块单独上传到服务器B,然后在服务器B上面…

数字文档管理解决财务部门哪些常见问题?

如今,会计部门实施文档管理和自动化工作流程系统至关重要。这些组织要么缺乏数字系统,要么没有充分利用其文档管理解决方案的潜力。 数字文档管理解决财务部门哪些常见问题? 1.错过提前付款折扣:供应商经常为提前付款提供折扣&am…

虹科教您 | 浅谈现代GNSS模拟中的软件定义架构

随着技术的迭代更新,GPS/GNSS模拟技术也在不断发展进步。在过去,想要进行GNSS仿真基本上只有一种选择:使用固定式或分配式的硬件进行模拟。而如今,带来颠覆性创新的新型软件定义架构正在迅速取代传统的定制架构,这种独…

EvilnoVNC:一款针对组织安全与安全意识培训的网络钓鱼平台

关于EvilnoVNC EvilnoVNC是一款针对组织安全与安全意识培训的网络钓鱼平台,该工具开箱即用,可以帮助各大企业组织对内部员工进行安全意识培训,而且也可以帮助广大研究人员测试和研究网络钓鱼防御技术。 和其他网络钓鱼技术不同的不同之处在…

高并发秒杀的 常见的7种方案

高并发场景在现场的日常工作中很常见,特别是在互联网公司中,这篇文章就来通过秒杀商品来模拟高并发的场景。 本文环境: SpringBoot 2.5.7 MySQL 8.0 X MybatisPlus Swagger2.9.2 模拟工具: Jmeter 模拟场景: 减库…

2.5G网卡调试记录

2.5G网卡调试记录 下载驱动 去https://www.realtek.com/zh-tw/downloads这个网站下载2.5G USB网卡对应的驱动 编译驱动 Makefile中需要进入到内核目录/lib/modules/4.19.232/build中进行内核编译,但是我们的build文件链接已经失效了,并且源文件也删除…

力扣sql简单篇练习(八)

力扣sql简单篇练习(八) 1 修复表中的名字 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # 考察的是字符串函数的用法 SELECT user_id,concat(upper(left(name,1)),lower(substr(name,2))) name FROM Users ORDER BY user_id asc1.3 运行截图 2 订单…

Qt TCP (小型聊天窗口)

实现的具体功能为: 服务器端需要主动监听,可以主动断开连接,可以发送信息给客户端客户端需要输入主机,端口号,需要主动连接,可以主动断开连接,可以发送信息给服务器端服务器端和客户端都能看到聊…

【C++算法图解专栏】一篇文章带你掌握差分算法

✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📣专栏定位:为 0 基础刚入门数据结构与算法的小伙伴提供详细的讲解,也欢迎大佬们一起交流~ 📚专栏地址:https://blog.csdn.net/Newin…

hadoop.fs.FileSystem.get导致OOM的原因和解决方案

问题描述 在调用HDFS获取文件系统的get接口时,指定用户可能会导致OOM问题,示例代码如下: FileSystem fileSystem FileSystem.get(uri, conf, "hadoopuser");问题溯源 该方法源码: 在有缓存的情况下将从Cache中取&a…

Android 11 SystemUI(状态/导航栏)-状态栏下拉时图标的隐藏与通知面板的半透黑色背景

概述 本文续自:Android 11 的状态栏的隐藏 PS 本文虽然同属于SystemUI, 但目前并 没有 打算整理成专橍或撰写一个系列的想法. 仅仅为了记录一些过程, 留下那些容易被遗忘的点滴. 开始下拉时状态栏图标被隐藏 状态橍的图标在用户开始触摸(ACTION_DOWN)后, 会开始展开, 显示扩展…

答题小程序题目批量导入模板以及题库文本格式规范

近期又接到了一个知识竞赛的需求,在开发答题小程序的过程中,遇到了不少难题,但是都一一克服了。凭借多年的答题小程序开发经验,我总结了一下题目批量导入题库文本格式规范。一、答题小程序题目批量导入模板小程序【答题小博士】二…

《数字经济全景白皮书》后疫情时代数字化驱动增长洞察之赛道篇

易观分析:《数字经济全景白皮书》浓缩了易观分析对于数字经济各行业经验和数据的积累,并结合数字时代企业的实际业务和未来面临的挑战,以及数字技术的创新突破等因素,最终从数字经济发展大势以及各领域案例入手,帮助企…

面试之 Python 框架 Flask、Django、DRF

Django、flask、tornado 框架的比较 ★★★★★ Django:大而全的框架。它的内部组件比较多,如 ORM、Admin、中间件、Form、ModelForm、Session、缓存、信号、CSRF等,功能也都很完善。 flask:微型框架,内部组件就比较少…

JavaScript中的事件对象、事件对象的属性

一、什么是事件对象​ 1)、 事件对象 就是保存着事件相关信息的对象。当事件发生时,会自动产生事件对象(不需要new),事件对象中包含着:事件源(发生事件的dom元素),点击是…

全网最详细的mybatis plus 条件构造器queryWrapper学习,比如and(),eq(),or(),like()等方法以及分页操作

文章目录1. 引言2. 结构关系3. 环境配置3.1 引入jar包3.2 创建数据源3.2 创建User实体类3.4 创建UserMapper类3.5 创建UserService类4. 操作演示5. 注意事项1. 引言 mybatis大家都有使用过,既面向对象又灵活可配。不友好的地方是,会随着使用出现大量xml…

一篇文章带你读懂AVL树

目录 AVL树节点的定义 AVL树的插入 AVL树的旋转 1. 新节点插入较高左子树的左侧---左左:右单旋 2.新节点插入较高右子树的右侧---右右:左单旋 3. 新节点插入较高左子树的右侧---左右:先左单旋再右单旋 4. 新节点插入较高右子树的左侧-…

人工智能自然语言处理—PageRank算法和TextRank算法详解

人工智能自然语言处理—PageRank算法和TextRank算法详解 一、PageRank算法 PageRank算法最初被用作互联网页面重要性的计算方法。它由佩奇和布林于1996年提出,并被用于谷歌搜索引擎的页面排名。事实上,PageRank可以在任何有向图上定义,然后…

公司企业如何设计微信小程序?

​很多公司企业在制作小程序的时候都会考虑一个事情,就是如何设计微信小程序。有些公司企业希望把小程序设计得非常炫酷、抓人眼球。那么问题是:公司企业微信小程序的设计是否做得越酷炫、越抓人眼球就越好呢? 答案:非也&#xf…