Python 进行自动化处理相关的库。如:
pyautogui:Python 的 GUI 自动化处理工具,Python 代码版的按键精灵key_board:检测按键APScheduler:Advanced Python Scheduler:基于 Quartz 的 Python 定时任务框架,轻量而功能强大的进程内任务调度器sched:【标准库】事件调度器watchdog: 管理文件系统事件的 API 和 shell 工具,用于监视文件系统变动。pywinauto:PC 端自动化工具,Windows 应用程序的自动化pywin32:Python 访问 WindowsAPI 的常量、接口、线程以及 COM 机制等等。when-changed:文件变动监控nox:自动化任务tox:自动化任务
概述
定时任务
- Linux 的 crontab
time.sleep():用于简单的测试schedule 模块:阻塞式的,一般死循环来定义,需并行要用多线程threading的Timerpython-crontab:linux 可用,不跨平台celery:可用于任务调度- APScheduler:
Java 风格,,woc,真香apscheduler.schedulers.blocking.BlockingScheduler,这样一长串,呕。
PyAutoGUI
pyautogui:Python 的 GUI 自动化处理工具,Python 代码版的按键精灵
全局设置
依赖
python3-Xlib- 截屏需要:
sudo pacman -S scrot
保护措施 -FAILSAFE
- 默认
pyautogui.FAILSAFE = True:pyautogui 在运行过程中,将鼠标光标放在屏幕左上角,会报pyautogui.FailSafeException异常。 - 有需要就鼠标光标移到屏幕左上角,要禁用就
pyautogui.FAILSAFE=False
操作延迟 -PAUSE
- 默认每步操作间间隔为 0.1 秒,即延迟时间。
- 可设置
pyautogui.PAUSE = 0,无间隔。- 注:改为 0 后跑得飞快,得注意“安全”。
- 所有的 PyAutoGUI 函数在延迟完成前都处于阻塞状态(block)。
说明
- 灵活结合
time.sleep()
屏幕信息
屏幕位置使用 X 和 Y 轴的笛卡尔坐标系。原点 (0,0) 在左上角,分别向右、向下增大。
如果屏幕像素是 1920×1080,那么右下角的坐标是 (1919, 1079)。
1 | ## 坐标系的原点是左上角,x 轴向右增大,y 轴向下增大 |
鼠标 -mouse
当前鼠标位置
1 | now_mouse_x, now_mouse_y = pyautogui.position() #当前鼠标位置 |
移动 -moveTo
- 默认的持续时间
pyautogui.MINIMUM_DURATION是 0.1 秒,如果你设置的时间比默认值还短,那么就会瞬间执行。
1 | pyautogui.moveTo(100,200) |
鼠标拖拽
dragTo,dragRel 类似于 moveTo,moveRel,只是是按下去的拖拽- button 可取 left,middle,right
1 | pyautogui.dragTo(100,200,button='left') #按着左键,拖拽到(100,200) |
点击 -click
1 | pyautogui.click() # 单击 |
按下与松开
1 | # 鼠标左键按下再松开 |
滚轮滚动 -scroll
1 | pyautogui.scroll(5,100,200) # 5:滚动的格数,正数滚轮向前,页面向上,负数页面向下 |
- 在 OS X 和 Linux 平台上,PyAutoGUI 还可以用
hscroll()实现水平滚动
1 | # 向右滚动 10 格 |
键盘操作 keyboard
所有按键
1 | pyautogui.KEYBOARD_KEYS |
按键
1 | pyautogui.press('esc') |
typewrite()
1 | # 单个字符输入 |
消息弹窗 MessageBox
1 | ## 输出 |
截屏与找图 -screenshot
截屏
1 | pyautogui.screenshot() |
找图
1920-1080 的屏幕,定位耗时需 1-2 秒,不足以定制游戏脚本
1 | location1=pyautogui.locateOnScreen('aa.png') |
locateAllOnScreen() 函数会寻找所有相似图片,返回一个生成器:
- locateOnScreen(image, grayscale=False):返回找到的第一个截图
Image对象在屏幕上的坐标(left, top, width, height),如果没找到返回None - locateCenterOnScreen(image, grayscale=False):返回找到的第一个截图
Image对象在屏幕上的中心坐标(x, y),如果没找到返回None - locateAllOnScreen(image, grayscale=False):返回找到的所有相同截图
Image对象在屏幕上的坐标(left, top, width, height)的生成器 - locate(needleImage, haystackImage, grayscale=False):返回找到的第一个截图
Image对象在haystackImage里面的坐标(left, top, width, height),如果没找到返回None - locateAll(needleImage, haystackImage, grayscale=False):返回找到的所有相同截图
Image对象在haystackImage里面的坐标(left, top, width, height)的生成器 - 两个
locateAll*函数都可以用for循环和list()输出:
如果没找到图片会返回None。 - 灰度值定位,约能提速 30%,导致假阳性(false-positive)匹配,默认为
False
1 | import pyautogui |
位置点像素值
1 | # RGB |
keyboard
keyboard:实现键盘事件的监听、模拟和控制
提供了一套简单而强大的API,使开发者能够轻松实现键盘事件的捕获、按键模拟和热键设置。与PyAutoGUI相比,keyboard更专注于键盘操作,具有以下特点:
优势:
- 跨平台支持(Windows、Linux、macOS)
- 低级键盘事件的精确控制
- 支持全局热键绑定
- 键盘事件的录制和回放
- 轻量级,安装简单
- 支持非ASCII键盘布局
局限:
- 在某些Linux系统上需要root权限
- 不支持图形界面自动化(需配合其他库使用)
- macOS上部分功能受限
基本使用
1 | pip install keyboard |
1 | import keyboard # using module keyboard |
按键检测
1 | import keyboard |
模拟输入
1 | import keyboard |
热键组合
1 | import keyboard |
录制与回放
1 | import keyboard |
键盘映射
1 | import keyboard |
综合使用
1 | import keyboard |
注意事项
在使用keyboard库进行桌面自动化开发时,请注意以下几点:
- 权限使用
- 在需要管理员权限的系统上,明确告知用户权限要求
- 避免在无权限的情况下执行敏感操作
- 异常处理
- 合理处理键盘事件异常
- 提供清晰的错误提示
- 实现优雅的退出机制
- 性能考虑
- 避免过于频繁的键盘操作
- 合理设置延时,防止系统过载
- 注意内存使用,避免内存泄漏
- 安全性
- 不要在键盘监听中记录敏感信息
- 避免自动化操作影响系统安全
- 提供紧急停止机制
APScheduler
APScheduler:Advanced Python Scheduler:基于 Quartz 的 Python 定时任务框架,轻量而功能强大的进程内任务调度器
- 定制性高(triggers):时间间隔(Interval)、周期性时间(Date)、cron 形式(Linux crontab)
- 后台存储(job stores):Memory、SQLAlchemy、Redis、MongoDB 等
- sched:标准库
- 有毫秒级的时间差(APScheduler是1ms内)
- schedule模块的局限性包括:单线程阻塞导致长任务阻塞其他任务、无任务持久化机制、缺乏错误重试、并发控制和分布式能力
- apscheduler(支持持久化和多调度器,适合中等复杂度场景)、celery(分布式任务队列,适合高并发和复杂任务)、系统cron(稳定但管理分散,适合独立脚本)以及threading/multiprocessing(灵活但需自行实现调度逻辑)
架构
组件:
- triggers:触发器:每个 job 都有触发器,包含它的调度逻辑
- job stores:作业存储:默认在内存中,序列化后可保存到其他地方,如 redis
- executors:执行器:处理作业的运行,将 job 中的可调用部分提交给线程或进程池来实现,job 完成后,执行器会通知调度器
- ThreadPool、ProcessPool
- schedulers:调度器:将其他组件绑定在一起,对使用者提供接口通常只有一个调度器 scheduler 在程序中运行。
- Add、Modify、Remove·
1 | BlockingScheduler # 调度器是程序中唯一要运行的东西 |
使用
1 | pip instal apscheduler |
1 | import time |
1 | def job_func(text): |
遇到的问题
- 问题:Timezone offset does not match system offset: 0 != 28800
- 解决方案
1 | # 因为系统时区和代码运行时区不一样导致,需在初始化的时候指定上海的时区 |
sched
sched:【标准库】事件调度器
- 定时执行程序
1 | import sched |
watchdog
watchdog: 管理文件系统事件的 API 和 shell 工具,用于监视文件系统变动。
- Watchdog 是一个用于监控文件系统事件的 Python 库。它提供了跨平台的 API 来监视文件系统更改,如文件的创建、修改、删除等事件。这个库在开发过程中特别有用,可以用于实现自动化构建、热重载、文件同步等功能。Watchdog 的事件处理系统设计灵活,支持自定义处理器和过滤器。
1 | pip install watchdog |
1 | import time |
pywinauto
pywinauto:PC 端自动化工具,Windows 应用程序的自动化
1 | from pywinauto.application import Application |
PyWin32
pywin32:Python 访问 WindowsAPI 的常量、接口、线程以及 COM 机制等等。
- 功能:
- 组件对象模型
- Win32 API 调用
- 注册
- 事件日志
- MFC 用户界面
1 | pip install pywin32 |
注册表修改
1 | import win32api |
1 | import win32api |
when-changed
when-changed:文件变动监控
1 | when-changed [OPTION] FILE COMMAND # file or dir |
nox
nox:自动化任务
tox:自动化任务
webbrowser
webbrowser:【标准库】:提供一个高层级接口,允许用户显示基于 web 的文档
- 方便的 web 浏览器控制工具
基本使用
1 | # 用这个就够了 |
