Python + PyAutoGUI 实战:Windows 自动化办公脚本开发入门
在日常办公场景中,很多重复动作并不复杂,却非常消耗时间:打开软件、输入固定内容、截图留存、重复点击、批量录入、定时执行某个流程。Python 的 pyautogui 库可以模拟鼠标、键盘和屏幕操作,让我们用脚本完成这些机械性任务。
本文面向 Python 自动化办公方向学习者,重点演示在 Windows 上如何用 pyautogui 完成鼠标移动与点击、键盘输入、屏幕截图、自动打开记事本输入文字,以及自动化重复操作。
说明:本文示例适合学习和个人办公辅助。正式用于企业流程前,应先在测试环境验证,避免误操作真实业务系统。
1. pyautogui 库介绍
pyautogui 是一个跨平台 GUI 自动化库,可以让 Python 控制鼠标、键盘和屏幕。它常用于:
- 自动点击按钮、菜单、输入框
- 自动输入文字和快捷键
- 获取鼠标当前位置
- 对屏幕进行截图
- 按固定流程重复执行操作
- 辅助 Excel、浏览器、记事本、ERP、后台系统等桌面软件操作
安装方式:
bash
pip install pyautogui
如果后续需要做图像识别式点击,还可以配合安装:
bash
pip install pillow opencv-python
导入方式:
python
import pyautogui
常用安全配置:
python
import pyautogui
# 每个 pyautogui 操作后暂停 0.2 秒,降低误操作风险
pyautogui.PAUSE = 0.2
# 启用故障保护:鼠标快速移动到屏幕左上角会抛出异常并停止脚本
pyautogui.FAILSAFE = True
FAILSAFE 非常重要。自动化脚本一旦点击错位置,可能连续执行很多错误动作。保留这个开关,可以让你在紧急情况下把鼠标移到屏幕左上角中止程序。
2. 鼠标移动与点击
2.1 获取屏幕尺寸
python
import pyautogui
width, height = pyautogui.size()
print(f"屏幕宽度:{width}, 屏幕高度:{height}")
2.2 获取当前鼠标位置
python
import pyautogui
import time
print("请在 3 秒内把鼠标移动到目标位置...")
time.sleep(3)
x, y = pyautogui.position()
print(f"当前鼠标坐标:({x}, {y})")
这段代码非常适合用来定位按钮、输入框、菜单等界面元素坐标。
2.3 移动鼠标
python
import pyautogui
# 将鼠标移动到屏幕坐标 (500, 300),移动过程持续 0.5 秒
pyautogui.moveTo(500, 300, duration=0.5)
2.4 点击鼠标
python
import pyautogui
# 左键单击
pyautogui.click(500, 300)
# 双击
pyautogui.doubleClick(500, 300)
# 右键单击
pyautogui.rightClick(500, 300)
2.5 拖拽鼠标
python
import pyautogui
# 从当前位置拖拽到 (800, 500)
pyautogui.dragTo(800, 500, duration=1, button="left")
如果你要自动化操作一个固定布局的软件,最简单的方式就是先记录关键坐标,再用 moveTo() 和 click() 组合执行。
3. 键盘输入
3.1 输入英文和数字
python
import pyautogui
pyautogui.write("Hello PyAutoGUI", interval=0.05)
interval 表示每个字符之间的输入间隔。适当放慢速度可以提高稳定性。
3.2 按单个按键
python
import pyautogui
pyautogui.press("enter")
pyautogui.press("tab")
pyautogui.press("esc")
3.3 快捷键组合
python
import pyautogui
# Ctrl + S 保存
pyautogui.hotkey("ctrl", "s")
# Ctrl + A 全选
pyautogui.hotkey("ctrl", "a")
# Alt + F4 关闭当前窗口
pyautogui.hotkey("alt", "f4")
3.4 中文输入的注意点
pyautogui.write() 更适合输入英文、数字和符号。中文输入可能受输入法状态影响,稳定性不如英文。
在 Windows 自动化办公中,输入中文建议使用剪贴板方式:
python
import pyautogui
import pyperclip
text = "这是一段由 Python 自动输入的中文内容。"
pyperclip.copy(text)
pyautogui.hotkey("ctrl", "v")
需要安装:
bash
pip install pyperclip
剪贴板粘贴方式通常比逐字模拟键盘更稳定,尤其适合输入大段文本。
4. 屏幕截图
4.1 截取全屏
python
import pyautogui
img = pyautogui.screenshot()
img.save("screen.png")
4.2 截取指定区域
python
import pyautogui
# region 参数格式:(left, top, width, height)
img = pyautogui.screenshot(region=(100, 100, 600, 400))
img.save("region.png")
截图在办公自动化里很常见,例如:
- 运行前后留痕
- 自动保存系统页面状态
- 判断界面是否进入目标页面
- 结合图像识别寻找按钮位置
5. 自动打开记事本输入文字
下面演示一个完整的小流程:打开 Windows 记事本,输入一段文字,并保存截图。
python
import subprocess
import time
import pyautogui
import pyperclip
pyautogui.PAUSE = 0.2
pyautogui.FAILSAFE = True
# 打开记事本
subprocess.Popen("notepad.exe")
time.sleep(1)
# 使用剪贴板输入中文,更稳定
content = """Windows 自动化办公脚本测试
这是 Python + PyAutoGUI 自动输入的内容。
它可以模拟鼠标、键盘,并完成截图等办公自动化任务。
"""
pyperclip.copy(content)
pyautogui.hotkey("ctrl", "v")
# 截图留存
img = pyautogui.screenshot()
img.save("notepad_result.png")
运行后,脚本会自动打开记事本,将文本粘贴进去,并在当前目录保存一张截图。
6. 自动化重复操作
办公自动化里最常见的价值来自"重复操作自动化"。例如重复点击按钮、重复输入多条数据、重复打开多个文件。
6.1 重复点击
python
import pyautogui
import time
pyautogui.PAUSE = 0.3
for i in range(5):
pyautogui.click(500, 300)
print(f"第 {i + 1} 次点击完成")
time.sleep(1)
6.2 批量输入多行数据
python
import pyautogui
import pyperclip
import time
rows = [
"张三 研发部 Python",
"李四 财务部 Excel",
"王五 行政部 Word",
]
time.sleep(3) # 给用户留出切换到目标输入框的时间
for row in rows:
pyperclip.copy(row)
pyautogui.hotkey("ctrl", "v")
pyautogui.press("enter")
time.sleep(0.5)
6.3 用函数封装重复动作
python
import pyautogui
import pyperclip
import time
def paste_line(text: str) -> None:
pyperclip.copy(text)
pyautogui.hotkey("ctrl", "v")
pyautogui.press("enter")
time.sleep(0.3)
items = ["任务 A", "任务 B", "任务 C"]
time.sleep(3)
for item in items:
paste_line(item)
封装函数后,脚本会更清晰,也方便以后扩展。
7. 风险与安全说明
pyautogui 的本质是模拟真实用户操作,因此它的风险也和人工误操作类似,但速度更快、影响可能更大。
使用前建议遵守以下原则:
- 先在测试窗口、测试账号、测试数据中运行。
- 不要一上来操作生产系统、财务系统、真实订单或真实客户数据。
- 保持
pyautogui.FAILSAFE = True,必要时把鼠标移到屏幕左上角中止脚本。 - 给关键步骤增加
time.sleep(),不要让脚本过快执行。 - 对高风险操作增加人工确认,例如删除、提交、付款、批量修改。
- 使用截图留痕,便于排查问题。
- 不要把账号密码硬编码在脚本中。
- 自动化脚本运行时不要随意移动鼠标或切换窗口。
- 如果界面位置会变化,尽量不要只依赖固定坐标,可以结合窗口标题、图像识别或更稳定的应用 API。
一个实用建议是:先让脚本只打印计划执行的动作,不真正点击;确认流程无误后,再打开点击逻辑。
8. 完整实战代码:自动打开记事本、输入内容、保存截图、重复追加日志
下面是一份完整示例代码,综合使用了:
pyautogui鼠标与键盘操作pyperclip粘贴中文subprocess打开记事本screenshot()截图- 循环执行重复操作
- 安全暂停与故障保护
保存为 pyautogui_notepad_office_demo.py 后运行。
python
import subprocess
import time
from datetime import datetime
from pathlib import Path
import pyautogui
import pyperclip
pyautogui.PAUSE = 0.25
pyautogui.FAILSAFE = True
def wait(seconds: float, message: str = "") -> None:
"""等待一段时间,并在控制台输出提示。"""
if message:
print(message)
time.sleep(seconds)
def paste_text(text: str) -> None:
"""通过剪贴板粘贴文本,适合中文和长文本。"""
pyperclip.copy(text)
pyautogui.hotkey("ctrl", "v")
def open_notepad() -> None:
"""打开 Windows 记事本。"""
subprocess.Popen("notepad.exe")
wait(1.5, "正在打开记事本...")
def write_report_header() -> None:
"""写入报告头部内容。"""
content = f"""Windows 自动化办公脚本运行记录
生成时间:{datetime.now().strftime("%Y-%m-%d %H:%M:%S")}
本文件由 Python + PyAutoGUI 自动生成。
脚本演示内容:
1. 自动打开记事本
2. 自动输入中文内容
3. 自动执行重复输入
4. 自动保存屏幕截图
运行日志:
"""
paste_text(content)
def append_log_lines(count: int = 5) -> None:
"""重复追加多行日志。"""
for index in range(1, count + 1):
line = f"{index}. 自动化办公任务第 {index} 步已完成。"
paste_text(line)
pyautogui.press("enter")
wait(0.4)
def save_screenshot(output_dir: Path) -> Path:
"""保存当前屏幕截图。"""
output_dir.mkdir(parents=True, exist_ok=True)
filename = datetime.now().strftime("pyautogui_notepad_%Y%m%d_%H%M%S.png")
screenshot_path = output_dir / filename
img = pyautogui.screenshot()
img.save(screenshot_path)
return screenshot_path
def main() -> None:
print("脚本将在 3 秒后开始运行。")
print("如果需要紧急停止,请把鼠标移动到屏幕左上角。")
wait(3)
open_notepad()
write_report_header()
append_log_lines(count=5)
screenshot_path = save_screenshot(Path("screenshots"))
print(f"截图已保存:{screenshot_path.resolve()}")
print("自动化演示完成。")
if __name__ == "__main__":
main()
运行前安装依赖:
bash
pip install pyautogui pyperclip pillow
运行:
bash
python pyautogui_notepad_office_demo.py
运行效果:
- 控制台提示 3 秒后开始。
- 自动打开 Windows 记事本。
- 自动粘贴中文运行记录。
- 自动重复追加 5 行日志。
- 自动保存屏幕截图到
screenshots目录。
9. 进阶方向
掌握基础操作后,可以继续学习以下方向:
- 使用
locateOnScreen()根据图片定位按钮。 - 结合 Excel 文件批量读取待录入数据。
- 结合
schedule做定时自动化任务。 - 结合日志模块记录每一步操作结果。
- 结合异常处理,失败时自动截图。
- 对网页系统优先考虑 Playwright、Selenium 等浏览器自动化工具。
- 对 Excel、Word、PDF 等文件优先考虑专用库,例如
openpyxl、python-docx、pypdf。
pyautogui 的优势是简单、直观、可以控制几乎所有桌面软件;缺点是依赖屏幕状态和窗口位置,稳定性不如直接调用 API。因此在实际办公自动化中,可以把它作为"最后一公里"的桌面操作工具,与文件处理库、浏览器自动化库、数据库脚本组合使用。
总结
本文演示了 Python + pyautogui 在 Windows 自动化办公中的基础用法,包括库介绍、鼠标移动与点击、键盘输入、屏幕截图、自动打开记事本输入文字、自动化重复操作,以及风险与安全说明。
对于初学者来说,建议从低风险场景开始练习,例如自动打开记事本、自动输入文本、自动截图。等熟悉坐标、快捷键、等待时间和异常处理后,再逐步应用到真实办公流程中。
自动化办公的核心不是"让脚本点得更快",而是把重复、固定、可验证的流程交给程序完成,让人把精力放在判断、沟通和决策上。