问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

让 pyautogui 自动化你的工作

创作时间:
作者:
@小白创作中心

让 pyautogui 自动化你的工作

引用
CSDN
1.
https://m.blog.csdn.net/Jonny_Huang/article/details/136850203

pyautogui是一个强大的Python库,可以让你的电脑实现鼠标和键盘的自动化控制。无论是简单的鼠标点击,还是复杂的键盘输入,pyautogui都能轻松应对。本文将详细介绍pyautogui的基本使用方法,帮助你快速掌握这个强大的工具。

警告!

为善去恶,希望你学会这项技术提高自己的生产效率,勿做有损他人的事情。

pyautogui可以控制鼠标移动和点击,可以用来实现一些自动化的操作,非常有趣。

注意事项

为避免失控,快速甩动鼠标到屏幕角落以强行退出程序。

一、控制鼠标
1. 安装pyautogui

在Windows的cmd窗口输入指令

pip install pyautogui
2. 确认安装正常

使用pyautogui.size()获取当前屏幕的宽高,返回是一个点对象。

import pyautogui
wh = pyautogui.size()
print(wh.width, wh.height)
3. 移动鼠标到绝对位置

使用pyautogui.moveTo()可将光标移至屏幕任意位置,传入三个参数,前两个分别为位置坐标xy,第三个duration=用来指定这个动作的耗时。
先了解一下计算机显示器的像素坐标系,屏幕左上为原点,x轴指向右侧,y轴指向屏幕底端。

图1 分辨率为1920x1080的屏幕坐标系图片

[1]

举个例子,让鼠标自动画长方形。

import pyautogui
for i in range(10):
    pyautogui.moveTo(100, 100, duration=0.25)
    pyautogui.moveTo(100, 400, duration=0.25)
    pyautogui.moveTo(400, 400, duration=0.25)
    pyautogui.moveTo(400, 100, duration=0.25)
4. 移动鼠标到相对位置

使用pyautogui.move(),同样是三个参数,区别是坐标为相对位移坐标。
如果要获得鼠标当前位于何处,可以使用pyautogui.positioin(),没有参数,返回一个对象包含两个坐标值。

5. 控制鼠标点击

让鼠标在坐标(100,100)处完成一次左键单击,使用pyautogui.click(),传入的第三个参数button=用来指定左键、中键和右键。

import pyautogui
pyautogui.click(100, 100, button='left')    # 点击左键
pytutogui.click(100, 100, button='right')   # 点击右键

完成一次点击包括两个动作,也就是按下与释放。pyautogui.click()使用了默认的时间间隔。如果我们想要自定义按下和释放之间的保持时间,就使用pyautogui.mouseDown()来按下,用pyautogui.mouseUp()来释放,参数相同。

6. 拖动鼠标

按下后保持,再移动鼠标,可用pyautogui.dragTo()或者pyautogui.drag()实现,前者是绝对位置,后者为相对位置。
以下代码是用鼠标绘图的例子

import pyautogui
import time

time.sleep(5)   # 等待切换软件窗口
pyautogui.click(800, 600)   # 点击画幅内的一点作为起点

distance = 500
change = 20
while distance > 0:
    pyautogui.drag(distance, 0, duration=0.2)   # Move right.
    distance = distance - change
    pyautogui.drag(0, distance, duration=0.2)   # Move down.
    pyautogui.drag(-distance, 0, duration=0.2)  # Move left.
    distance = distance - change
    pyautogui.drag(0, -distance, duration=0.2) 

事先打开一个绘图软件,此处以windows绘图软件为例,选择好画笔后回到IDE启动脚本。程序中有一个5s的延时,因此启动程序后5s内将实现准备好的绘图软件窗口最大化。

图2 pyautogui.drag()拖动鼠标绘制图形的结果

7. 控制滚轮

使用pyautogui.scroll()输入参数为整数滚动单位。

8. 获取屏幕上某一点的像素坐标

使用snipaste软件,启动在后台运行,需要时点击F1进入截图预览模式,此时鼠标所处的位置会有坐标值显示。
或者使用pyautogui.displayMousePosition()实时显示位置和颜色信息。

9. 获取屏幕图像信息

使用pyautogui.screenshot()获取全屏截图。使用pyautogui.pixel(x, y)获取某个像素点的颜色信息输入两个坐标值。
判断某个点是否与给定颜色一致,可用pyautogui.pixelMatchesColor(x, y, (R, G, B)),输入两个坐标值,和一个包含RGB信息的元组。
判断给定的图片在屏幕上的哪个位置,可用pyautogui.locateOnScreen('img.jpg'),传入参数为图片路径,返回xywh元组,可能有多个。如果想要点击这个区域的中心,将该元组传入pyautogui.click((x, y, w, h))即可。甚至可以直接这样pyautogui.click('img.jpg')实现查找和点击,但是有可能不成功,需和try以及except一起用。

10. 获取窗口信息
import pyautogui
fw = pyautogui.getActiveWindow() # 获取活动的窗口信息
print(str(fw))  # <Win32Window left="-12", top="-12", width="2584", height="1540", title="test.py - Visual Studio Code">

pyautogui.getAllWindows() # 返回一个list,包含所有的窗口信息

pyautogui.getWindowsAt(x, y) # 输入xy坐标,返回包含坐标的所有窗口

pyautogui.getWindowsWithTitle(title) # 输入title,返回对应的窗口

pyautogui.getAllTitles() # 获取所有的串口标题,返回是一个list,元素为string

对获取到的窗口可以进行一些操作

fw.width = 1000 # 将窗口宽度调整为1000像素

fw.topleft = (200, 200) # 将窗口左上角移动到指定位置

print(fw.isMaximized) # 判断窗口是否为最大化

fw.maximize() # 最大化窗口

fw.minimize() # 最小化窗口

fw.restore()  # 恢复最大化/最小化操作

完整的使用方法,见官方文档https://pyautogui.readthedocs.io/

二、控制键盘
1. 输入内容

首先通过点击确定文字输入区域,再用pyautogui.write()输入。

import pyautogui
pyautogui.click(1080,1400)
pyautogui.write('hello world!') # pyautogui输入'!'时会自动按下shift键

# 使用list传入时可以将键盘上的所有键以名称方式描述,如'left'表←键
pyautogui.write(['a', 'b', 'left', 'left', 'X', 'Y']) # 按顺序按下a、b、←、←、shift+x、shift+y 结果 XYab

键盘对应的内容表格如下

键盘关键字
含义
‘a’, ‘b’, ‘c’, ‘A’, ‘B’, ‘C’, ‘1’, ‘2’, ‘3’, ‘!’, ‘@’, '#'等
单字符按键
‘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’
up, down, left 和 right 箭头键
‘f1’, ‘f2’, ‘f3’, 等
F1 到 F12 键
‘volumemute’, ‘volumedown’, ‘volumeup’
静音,音量减,音量加键(有些键盘没有这些键,但是你的电脑可以接收这些指令)
‘pause’
PAUSE键
‘capslock’, ‘numlock’, ‘scrolllock’
CAPS LOCK, NUM LOCK, 和 SCROLL LOCK 键
‘insert’
INS 或 INSERT 键
‘printscreen’
PRTSC 或 PRINT SCREEN 键
‘winleft’, ‘winright’
左右WIN键(Windows)
‘command’
Command键(macOS)
‘option’
OPTION键(on macOS)
2. 热键组合

与鼠标相似,我们可以用pyautogui.keyDown()pyautogui.keyUp()来分开控制键盘的按下与释放。
如在windows上实现一次复制粘贴,可以如下操作

pyautogui.keyDown('ctrl')
pyautogui.keyDown('c')
pyautogui.keyUp('c')
pyautogui.keyUp('ctrl')

但是上面的操作未免有些复杂了,同样的操作可以这样

pyautogui.hotkey('ctrl', 'c')
3. 使用提示
  • 屏幕分辨率保持不便
  • 应用窗口应该最大化,因为这样才能保证按钮始终在同一个位置
  • 根据软件反应速度多给一些延时,你不会想在上一个动作没有完成就开始点击
  • 使用locateOnScreen()寻找按钮,尽量不依赖xy坐标,在没发现目标时停止比乱点击要好
  • 使用getWindowsWithTitle()确保你准备控制的应用程序窗口是存在的,用activate()让窗口进入前台
  • 增加尽可能多的检查,如弹窗、断网的情况怎么处理
  • 第一次运行时要完整地观察是否正常

给延时的两个例子

import time
time.sleep(3)   # 等待3s

import pyautogui
pyautogui.countdown(10) # 等待10s,在命令行倒数输出10、9、8...

另外可以用pyautogui.alert('text')pyautogui.confirm('text')来弹窗确认。如果需要使用到剪贴板里面的内容,需要用到import pyperclip然后pyperclip.paste()

引用
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号