【Python军火库】pyautogui:成熟的鼠标和键盘自己动起来!

【Python军火库】pyautogui:成熟的鼠标和键盘自己动起来!_第1张图片

文章目录

  • 一、前提知识点
    • 1. 安装pyautogui
    • 2. 电脑分辨率这件事
    • 3. 做好GUI安全措施
  • 二、鼠标动起来!
    • 1. 控制鼠标移动
    • 2. 控制鼠标交互
  • 三、键盘动起来!
  • 四、屏幕图像识别
    • 1. 处理屏幕
    • 2. 图像识别
  • 五、复盘总结


一、前提知识点

1. 安装pyautogui

不同的操作系统下安装pyautogui模块的复杂程度是不同的。

在Windows上 直接pip install pyautogui

但在OS X和Linux上安装就比较麻烦,需要先安装一些依赖库

在OS X上

  • 运行 sudo pip3 install pyobjc-framework-Quartz
  • 运行 sudo pip3 install pyobjc-core
  • 运行 sudo pip3 install pyobjc
  • 运行 pip3 install pyautogui

在Linux上

  • 运行 sudo pip3 install python3-xlib
  • 运行 sudo apt-get install scrot
  • 运行 sudo apt-get install python3-tk
  • 运行 sudo apt-get install python3-dev
  • 运行 pip3 install pyautogui

——

2. 电脑分辨率这件事

在pyautogui中,如果要想控制鼠标,那么首先得追踪到鼠标在屏幕上的位置,也就是说你必须知道在pyautogui中采取了怎样的做坐标系统,那就是我们常见的x,y坐标系。

以我的电脑是1920x1080分辨率为例
【Python军火库】pyautogui:成熟的鼠标和键盘自己动起来!_第2张图片

  • 通过整个x,y坐标系就能表示整个屏幕的每一位置
  • (0,0) 代表了屏幕最左上角,(1919,1079)代表了屏幕最右下角
  • 向右x坐标增加,向下y坐标增加
  • 所有坐标都是正整数,没有负数坐标

——

3. 做好GUI安全措施

首先要知道为啥要做好安全措施。

  1. 因为Python能够以超乎想象的速度移动和点击鼠标,速度太快以至于其他程序很可能跟不上。
  2. 如果程序本身存在问题,但是程序会依旧控制鼠标到处乱动,但是其操作并不是你所想要的。

基于以上情况普遍的发生,所以我们要提前做好一些安全措施,避免翻车。
【Python军火库】pyautogui:成熟的鼠标和键盘自己动起来!_第3张图片

安全措施一:暂停等待

pyautogui.PAUSE = 1 每个PyAutoGUI函数调用在执行动作之后,都会等待1秒;非PyAutoGUI指令不会停顿。

安全措施二:自动防故障

pyautogui.FAILSAFE = True 将鼠标移动到屏幕的左上角,这将导致pyautogui产生pyautogui.FailSafeException异常,再通过try和except语句进行处理,从而停止程序。

整体代码如下:

import pyautogui
pyautogui.PAUSE = 1
pyautogui.FAILSAFE = True

【Python军火库】pyautogui:成熟的鼠标和键盘自己动起来!_第4张图片

二、鼠标动起来!

首先我们来认识一些PyAutoGui函数方法,如何让鼠标自己移动、点击、拖动和滚动起来。
在这里插入图片描述
——

1. 控制鼠标移动

【01】pyautogui.size() 返回屏幕的宽和高像素数

import pyautogui
print(pyautogui.size())
width,height = pyautogui.size()
print(width,height)

程序运行结果
【Python军火库】pyautogui:成熟的鼠标和键盘自己动起来!_第5张图片
【02】pyautogui.moveTo()/.moveRel() 实现鼠标移动

import pyautogui
# pyautogui.moveTo()  绝对位置移动(移动到指定坐标)
for i in range(10):
	pyautogui.moveTo(100,100,duration=0.25)  # duration指定鼠标移到目的位置所需的秒数
	pyautogui.moveTo(200,100,duration=0.25)
	pyautogui.moveTo(200,200,duration=0.25)
	pyautogui.moveTo(100,200,duration=0.25)
	
#pyautogui.moveRel()  相对位置移动(基于目前鼠标位置进行移动)
for i in range(10):
	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)

程序运行起来就是这酱紫滴!(注意看中间光标)

【03】pyautogui.position() 返回鼠标当前位置

import pyautogui
print(pyautogui.position())

【Python军火库】pyautogui:成熟的鼠标和键盘自己动起来!_第6张图片
——

2. 控制鼠标交互

【01】pyautogui.click() 点击鼠标

点击鼠标的骚操作有很多种!

pyautogui.click()           # 当前位置点击书包
pyautogui.click(100,200,button='left')   # 点击指定坐标鼠标左键,参数有left、middle、right

pyautogui.mouseDown()     # 按下鼠标
pyautogui.mouseUp()       # 释放鼠标

pyautogui.doubleClick()    # 鼠标左键双击
pyautogui.rightClick()     # 鼠标右键单击
pyautogui.middleClick()    # 鼠标中键单击

【02】pyautogui.dragTo()/.dragRel() 拖动鼠标

这里可以参照moveTo()/moveRel()的用法

import pyautogui, time
print('5 second til it starts')
time.sleep(5)
pyautogui.click()    # 点击画图工具中获取焦点
distance = 300
shrink = 20
while distance > 0:
    pyautogui.dragRel(distance, 0, duration=0.1)   # 向右移动
    distance = distance - shrink
    pyautogui.dragRel(0, distance, duration=0.1)   # 向下移动
    pyautogui.dragRel(-distance, 0, duration=0.1)  # 向左移动
    distance = distance - shrink
    pyautogui.dragRel(0, -distance, duration=0.1)  # 向上移动

可以打开画图工具,运行起来试试鸭!是不是比自己这个手残要好得多。

【03】pyautogui.scroll() 滚动鼠标

import pyautogui
pyautogui.scroll(200)     # 正数向上滚动
pyautogui.scroll(-300)    # 负数向下滚动

【Python军火库】pyautogui:成熟的鼠标和键盘自己动起来!_第7张图片

三、键盘动起来!

知道如何让鼠标自己旋转跳跃之后,我们再来了解一下如何控制键盘自动实现文本输入、键盘按压以及各种快捷键的使用。
在这里插入图片描述
——

【01】pyautogui.typewrite() 输入字符串信息

import pyautogui,time

time.sleep(5)

pyautogui.click((361,266))    # 鼠标在记事本上获得焦点
pyautogui.typewrite('Hello world!','0.25')   # 输入字符串,每个字符之间间隔0.25秒

运行起来试一试

【02】pyautogui.keyDown()/.keyUp()/.press() 按压键盘

import pyautogui
pyautogui.keyDown('shift')       # 按下Shift
pyautogui.press('4')             # 按下并松开4 
pyautogui.keyUp('shift')         # 松开Shift

【03】pyautogui.hotkey() 快捷键使用

依次传入快捷键的键名字符串,pyautogui.hotkey(key1,key2,key3,...) 按照顺序按下给定键,然后以相反的顺序释放

import pyautogui
def commentAfterDelay():
	pyautogui.click(100,100)
	pyautogui.typewrite('In IDLE, Alt-3 comments out a line.')
	time.sleep(2)
	pyautogui.hotkey('alt','3')

commentsAfterDelay()

【Python军火库】pyautogui:成熟的鼠标和键盘自己动起来!_第8张图片

四、屏幕图像识别

有些时候,我们想要进行GUI自动化操作,光靠坐标系定位还是不够的,因为可能会出现多种多样的原因导致我们所需定位的目标元素并不在我们所认为的那个坐标上。

比如软件、浏览器等界面大小变化,或者突然出点弹窗等等。

所以我们就需要对整个当面页面进行识别,通过判断元素的RGB值与我们所期待的是否一致,从而来寻找到目标对象。

这就是在pyautogui中进行屏幕处理和图像识别的机制。

——

1. 处理屏幕

这里主要涉及三个方法

  • pyautogui.screenshot() 获得当前屏幕快照的Image对象
  • gepixel((x,y)) 返回(x,y)坐标的RGB元组
  • pyautogui.pixelMatchesColor() 判断坐标处RGB是否匹配
import pyautogui

im = pyautogui.screenshot()   # 获得屏幕快照
im.getpixel((50,200))    # 返回该坐标的RGB
# RGB(130,135,144)

pyautogui.pixelMatchedColor(50,200,(130,135,144))  # 验证指定坐标是否与参数中的RGB值相匹配
# True

pyautogui.pixelMatchedColor(50,200,(131,135,144))  # 验证指定坐标是否与参数中的RGB值相匹配
# False  就算一小点的不一致,都会无法匹配

——

2. 图像识别

如果我们并不知道鼠标该点击哪里,就可以通过图像识别,向PyAutoGui提供希望点击的图像,让它自己在当前屏幕找到坐标。

  • pyautogui.locateOnScreen() 返回在屏幕上首次发现的图像的左上角x,y坐标,以及图像宽高(一个元组);如果找不到则返回None;如果找到多个,可以通过list(),返回其元组的列表
  • pyauto.center() 返回图像的中心坐标
import pyautogui
list(pyautogui.locateOnScreen('submit.png'))   # 返回屏幕上发现该图像的顶点坐标和宽高
#(643,745,70,29)
pyautogui.center((643,745,70,29))      # 返回图像的中心坐标
#(678,759)
pyautogui.click((678,759))  # 鼠标左键点击

【Python军火库】pyautogui:成熟的鼠标和键盘自己动起来!_第9张图片

五、复盘总结

  • 首先得清楚了解x,y坐标系,才知道如何将鼠标放在想要的位置上
  • 两个安全措施不能忘:等待暂停和自动防故障
  • 鼠标动起来的方法:如何确定当前坐标、绝对移动、相对移动、各种点击操作、鼠标拖动、鼠标滑动
  • 键盘动起来的方法:如何输入文本、如何模拟键盘按键,甚至是快捷键的使用操作
  • 需要更多思考的GUI自动化如何与实践相结合,从而使工作生活更便利

在这里插入图片描述

你可能感兴趣的:(Python军火库,python,gui,Python军火库,自动化,Python模块)