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 自动化办公中的基础用法,包括库介绍、鼠标移动与点击、键盘输入、屏幕截图、自动打开记事本输入文字、自动化重复操作,以及风险与安全说明。

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

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

相关推荐
m0_609160491 小时前
MySQL如何限制触发器递归调用的深度_防止触发器死循环方法
jvm·数据库·python
扬帆破浪1 小时前
免费开源AI软件.桌面单机版,可移动的AI知识库,察元 AI桌面版:Windows装包被防病毒拦了 看安装日志和签名链的实战
人工智能·windows·开源·知识图谱
zjy277771 小时前
Golang bcrypt如何加密密码_Golang密码加密教程【收藏】
jvm·数据库·python
万邦科技Lafite1 小时前
API接口一键获取商品评论,根据商品评论分析客户画像
linux·服务器·数据库·windows·microsoft·电商开放平台
曾庆睿1 小时前
【基于 RHEL 9.3 的 K8s + GitLab 全自动化部署环境搭建第一篇】
kubernetes·自动化·gitlab
曾庆睿1 小时前
【基于 RHEL 9.3 的 K8s + GitLab 全自动化部署环境搭建第二篇】
kubernetes·自动化·gitlab
老纪1 小时前
Redis怎样利用Lua为多个Key同步续期
jvm·数据库·python
2403_883261091 小时前
C#怎么计算两个日期的差值_C#如何处理时间跨度【笔记】
jvm·数据库·python
m0_740653221 小时前
Golang切片底层原理是怎样的_Golang切片实现原理教程【简明】
jvm·数据库·python