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

时间:2023-02-13 12:59:08

✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。

 ????个人主页:算法工程师的学习日志

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

python自动化办公--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,duratinotallow=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, buttnotallow='left', duratinotallow=0.0, tween=pyautogui.linear)

# 鼠标相对移动 ,向下移动
#pyautogui.moveRel(None, 10)
pyautogui.moveRel(xOffset=None, yOffset=10,duratinotallow=0.0, tween=pyautogui.linear)


# 鼠标当前位置0间隔双击
#pyautogui.doubleClick()
pyautogui.doubleClick(x=None, y=None, interval=0.0, buttnotallow='left', duratinotallow=0.0, tween=pyautogui.linear)

# 鼠标当前位置3击
#pyautogui.tripleClick()
pyautogui.tripleClick(x=None, y=None, interval=0.0, buttnotallow='left', duratinotallow=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, duratinotallow=2, tween=pyautogui.easeInOutQuad)

#鼠标拖拽
pyautogui.dragTo(x=427, y=535, duratinotallow=3,buttnotallow='left')

#鼠标相对拖拽
pyautogui.dragRel(xOffset=100,yOffset=100,duratinotallow=,buttnotallow='left',mouseDownUp=False)

#鼠标移动到x=1796, y=778位置按下
pyautogui.mouseDown(x=1796, y=778, buttnotallow='left')

#鼠标移动到x=2745, y=778位置松开(与mouseDown组合使用选中)
pyautogui.mouseUp(x=2745, y=778, buttnotallow='left',duratinotallow=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​​)

回车

​esc​

ESC键

​shiftleft​​​, ​​shiftright​

左右SHIFT键

​altleft​​​, ​​altright​

左右ALT键

​ctrlleft​​​, ​​ctrlright​

左右CTRL键

​tab​​​ (​​\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​​​, ​​volumedown​​​,​​volumeup​

有些键盘没有

​pause​

PAUSE键

​capslock​​​, ​​numlock​​​,​​scrolllock​

CAPS LOCK, NUM LOCK, 和 SCROLLLOCK 键

​insert​

INS或INSERT键

​printscreen​

PRTSC 或 PRINT SCREEN键

​winleft​​​, ​​winright​

Win键

​command​

Mac 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

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