写在前面
搞Python自动化这些年,我有一个感受:工具不在多,在于你真正用过、踩过坑、还愿意继续用的。
网上不缺"Python自动化十大库"这类清单文,但大多数读完就忘------因为它们只告诉你"有什么",不告诉你"什么场景下真的好用"。
这篇文章不讲大道理,只聊我在实际工作中反复用到的Python自动化项目,以及它们各自最擅长的场景。每个方向我都会给出真实使用感受,包括它好在哪里、坑在哪里。
如果你也厌倦了复制粘贴式的工具清单,这篇可能对你有点用。
一、文件与目录处理:pathlib + shutil
为什么不用os.path?
说实话,2026年了,如果你还在写 os.path.join('a', 'b', 'c'),是时候升级了。
pathlib 从Python 3.4引入,到今天已经是标准库中最优雅的文件路径处理方案。面向对象的写法,链式调用,可读性碾压 os.path 系列。
python
from pathlib import Path
# 创建目录
Path('data/raw/2026-08').mkdir(parents=True, exist_ok=True)
# 遍历所有CSV文件
for f in Path('data').rglob('*.csv'):
print(f.name, f.stat().st_size)
# 读取文本
content = Path('config.yaml').read_text(encoding='utf-8')
shutil:批量文件操作的瑞士军刀
当你需要移动、复制、压缩 大量文件时,shutil 是最直接的选择。
python
import shutil
# 按日期归档日志文件
for log in Path('logs').glob('*.log'):
date_str = log.stat().st_mtime
target_dir = Path('archive') / '2026-08'
target_dir.mkdir(parents=True, exist_ok=True)
shutil.copy2(log, target_dir / log.name)
# 打包整个目录
shutil.make_archive('backup_202608', 'zip', 'data/')
我的感受 :pathlib + shutil 组合,覆盖了我90%的文件操作需求。只有在需要监听文件变化时才会考虑 watchdog,其他时候这两个就够了。
二、网页自动化:Playwright
Selenium的时代正在落幕
这不是我一个人的观点。2026年最新的开发者生态报告显示,Playwright使用率已达38.7%,正式超越Selenium的29.1%。
原因很简单:Playwright更快、更稳、API更现代。自动等待机制、原生多浏览器支持、一步录制脚本------这些特性让Selenium的WebDriver模式显得笨重。
python
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
# 自动等待元素出现
page.goto('https://example.com')
page.fill('#search', 'Python自动化')
page.click('#submit')
# 截图保存
page.screenshot(path='result.png')
browser.close()
我的实战场景
- 批量填报表单:200个员工信息录入OA系统,脚本跑10分钟搞定
- 网页数据采集:动态渲染的SPA页面,Playwright能等JS执行完再抓
- 自动化测试:CI/CD流水线里跑端到端测试,比Selenium快3倍
踩过的坑 :headless=True 时某些网站会检测到无头模式,需要用 stealth 插件绕过。但大部分内部系统没这个问题。
如果你还在用Selenium,建议花一个周末迁移到Playwright。学习成本很低,回报很高。
三、数据抓取:requests + BeautifulSoup / Scrapy
轻量场景:requests + BeautifulSoup
不是所有抓取都需要上框架。如果目标页面是静态HTML,requests + BeautifulSoup 是最轻量的组合。
python
import requests
from bs4 import BeautifulSoup
resp = requests.get('https://news.example.com',
headers={'User-Agent': 'Mozilla/5.0'})
soup = BeautifulSoup(resp.text, 'html.parser')
titles = [h2.text.strip() for h2 in soup.select('h2.title')]
适合场景:简单页面、一次性抓取、快速验证想法。
重量场景:Scrapy
当你的需求变成持续抓取数千个页面、需要去重、需要管道处理、需要限速 时,Scrapy 才是正确的选择。
python
import scrapy
class BlogSpider(scrapy.Spider):
name = 'blog'
start_urls = ['https://blog.example.com/page/1']
def parse(self, response):
for article in response.css('article.post'):
yield {
'title': article.css('h2::text').get(),
'url': article.css('a::attr(href)').get(),
}
# 自动翻页
next_page = response.css('a.next::attr(href)').get()
if next_page:
yield response.follow(next_page, self.parse)
我的选型原则:
| 场景 | 工具 | 理由 |
|---|---|---|
| 抓1个页面 | requests + BS4 | 五分钟写完,没必要上框架 |
| 抓100个页面 | Scrapy | 内置并发、去重、管道 |
| 动态渲染页面 | Playwright | JS没执行完,BS4拿不到数据 |
| 反爬严格的站 | Playwright + stealth | 模拟真实浏览器行为 |
四、办公自动化:openpyxl + python-docx
Excel:openpyxl
Python操作Excel的库很多------xlrd、xlwt、pandas、openpyxl。但如果你需要读写xlsx、设置格式、合并单元格、插入图表 ,openpyxl 是最全面的。
python
from openpyxl import Workbook, load_workbook
from openpyxl.styles import Font, PatternFill
wb = Workbook()
ws = wb.active
ws.title = '月度报告'
# 写入数据 + 设置样式
header_font = Font(bold=True, color='FFFFFF')
header_fill = PatternFill('solid', fgColor='4472C4')
for col, title in enumerate(['日期', '访问量', '转化率'], 1):
cell = ws.cell(row=1, column=col, value=title)
cell.font = header_font
cell.fill = header_fill
# 写入数据行
data = [('2026-08-01', 12000, '3.2%'),
('2026-08-02', 15000, '4.1%'),
('2026-08-03', 18000, '5.0%')]
for row_idx, row_data in enumerate(data, 2):
for col_idx, value in enumerate(row_data, 1):
ws.cell(row=row_idx, column=col_idx, value=value)
wb.save('月度报告.xlsx')
Word:python-docx
需要批量生成合同、报告、通知函?python-docx 可以帮你把模板替换做到自动化。
python
from docx import Document
doc = Document('合同模板.docx')
# 替换占位符
for paragraph in doc.paragraphs:
if '{company}' in paragraph.text:
paragraph.text = paragraph.text.replace('{company}', '某某科技有限公司')
if '{date}' in paragraph.text:
paragraph.text = paragraph.text.replace('{date}', '2026年8月9日')
doc.save('合同_某某科技_20260809.docx')
我的感受:办公自动化是Python最"亲民"的方向。你不需要什么高深算法,只要会文件读写 + 字符串替换,就能帮同事省掉大量重复劳动。这种"小工具大价值"的事情,往往最容易赢得团队好感。
五、桌面GUI自动化:PyAutoGUI
当你需要控制鼠标、键盘、识别屏幕图像 时,PyAutoGUI 是最直接的方案。
python
import pyautogui
import time
# 留3秒切换到目标窗口
time.sleep(3)
# 点击坐标
pyautogui.click(x=500, y=300)
# 输入文字
pyautogui.typewrite('Hello Python', interval=0.05)
# 截屏找图并点击
location = pyautogui.locateOnScreen('button.png', confidence=0.9)
if location:
pyautogui.click(location)
适用场景与局限
适合:操作那些没有API的老旧软件、ERP系统、桌面客户端。
不适合:任何有API可调用的场景。能用API就别用GUI自动化------这是铁律。GUI自动化的脆弱性在于:窗口位置一变、分辨率一换、UI一更新,脚本就挂了。
我的建议:PyAutoGUI是"最后的手段",不是首选。先找API,找不到再考虑它。
六、定时任务调度:Schedule
Python自带的 sched 和 cron 都能用,但 schedule 库的API设计简直是艺术品------人类可读的链式调用。
python
import schedule
import time
def daily_report():
print('生成日报...')
def sync_data():
print('同步数据...')
schedule.every().day.at('09:00').do(daily_report)
schedule.every().hour.do(sync_data)
schedule.every(10).minutes.do(lambda: print('心跳检查'))
while True:
schedule.run_pending()
time.sleep(1)
但要注意 :schedule 是进程内的轻量调度,适合脚本和小项目。如果你的定时任务需要持久化、分布式、失败重试 ,请直接上 Celery Beat 或 APScheduler,别在 schedule 上硬扛。
七、运维脚本:Fabric
需要SSH到多台服务器执行命令、部署代码?Fabric 把这事儿简化成了几行Python。
python
from fabric import Connection
# 连接远程服务器部署
with Connection('user@server.example.com') as c:
c.run('cd /app && git pull')
c.run('pip install -r requirements.txt')
c.run('systemctl restart myapp')
c.put('config.ini', '/app/config.ini')
我的感受:Fabric最适合的场景是"少量服务器 + 简单部署流程"。一旦服务器数量超过10台,或者部署流程涉及灰度发布、回滚、健康检查,就该上Ansible或K8s了。但在小团队和个人项目中,Fabric的效率无可匹敌。
选型总结:一张表搞定
| 方向 | 首选库 | 备选 | 典型场景 |
|---|---|---|---|
| 文件处理 | pathlib + shutil | watchdog | 目录归档、日志清理 |
| 网页自动化 | Playwright | Selenium | 表单填报、E2E测试 |
| 静态页面抓取 | requests + BS4 | httpx | 一次性数据采集 |
| 大规模爬虫 | Scrapy | --- | 持续化、多页面采集 |
| Excel处理 | openpyxl | pandas | 报表生成、格式设置 |
| Word处理 | python-docx | --- | 合同/报告批量生成 |
| 桌面GUI | PyAutoGUI | pywinauto | 无API的老旧系统操作 |
| 定时任务 | schedule | APScheduler | 脚本级轻量调度 |
| 运维部署 | Fabric | Ansible | SSH批量操作 |
写在最后
Python自动化的核心从来不是"知道多少库",而是识别重复劳动、选择合适工具、把流程脚本化。
我见过有人用50行Python脚本替代了每天2小时的手工操作,也见过有人花一周写了个"万能自动化框架"最后没人用。区别在哪?前者解决真实问题,后者追求技术自嗨。
少即是多。先把一个方向吃透,比什么都试一点强一百倍。
如果你也在用Python做自动化,欢迎在评论区分享你的实战经验------我始终相信,最好的工具清单来自真实使用者的交流,而不是搜索引擎的聚合结果。