Python + PyAutoGUI 实战:Windows 自动化办公脚本开发入门

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

运行效果:

  1. 控制台提示 3 秒后开始。
  2. 自动打开 Windows 记事本。
  3. 自动粘贴中文运行记录。
  4. 自动重复追加 5 行日志。
  5. 自动保存屏幕截图到 screenshots 目录。

9. 进阶方向

掌握基础操作后,可以继续学习以下方向:

  • 使用 locateOnScreen() 根据图片定位按钮。
  • 结合 Excel 文件批量读取待录入数据。
  • 结合 schedule 做定时自动化任务。
  • 结合日志模块记录每一步操作结果。
  • 结合异常处理,失败时自动截图。
  • 对网页系统优先考虑 Playwright、Selenium 等浏览器自动化工具。
  • 对 Excel、Word、PDF 等文件优先考虑专用库,例如 openpyxlpython-docxpypdf

pyautogui 的优势是简单、直观、可以控制几乎所有桌面软件;缺点是依赖屏幕状态和窗口位置,稳定性不如直接调用 API。因此在实际办公自动化中,可以把它作为"最后一公里"的桌面操作工具,与文件处理库、浏览器自动化库、数据库脚本组合使用。

总结

本文演示了 Python + pyautogui 在 Windows 自动化办公中的基础用法,包括库介绍、鼠标移动与点击、键盘输入、屏幕截图、自动打开记事本输入文字、自动化重复操作,以及风险与安全说明。

对于初学者来说,建议从低风险场景开始练习,例如自动打开记事本、自动输入文本、自动截图。等熟悉坐标、快捷键、等待时间和异常处理后,再逐步应用到真实办公流程中。

自动化办公的核心不是"让脚本点得更快",而是把重复、固定、可验证的流程交给程序完成,让人把精力放在判断、沟通和决策上。

相关推荐
青 春 记 忆4 小时前
Dify Docker Compose 通用无损升级指南:从备份、双版本预演到切换与回滚
运维·人工智能·python·docker·容器
GlueNa2SiO34 小时前
03-Flask模板引擎Jinja2详解
笔记·python·flask
临沂GEO7 小时前
GEO搜索优化科普|正规地理位置流量运营入门指南
大数据·人工智能·python·流量运营
大模型码小白7 小时前
Spring AI Tool 实现自然语言操作 MySQL 数据库详解
服务器·开发语言·数据库·人工智能·python·mysql·spring
荷蒲8 小时前
【小白量化Qbuddy】利用AI学习中文Python
人工智能·python·学习
数据狐(Datafox)10 小时前
京东商品列表API技术解析与落地应用(含标准 JSON 示例)
java·大数据·前端·人工智能·python·数据分析·json
量化吞吐机10 小时前
2026年下半年手工交易规则走向量化表达,产品该先接住哪一步
人工智能·python
志栋智能10 小时前
迈向真正的超自动化巡检
运维·自动化
Metaphor69210 小时前
使用 Python 读取和删除 Excel 文件属性
python·excel
迷迭香yy11 小时前
Python构建转融券多空识别系统从接口到因子的全流程 IG50免费开源股票数据API接口
开发语言·python·开源