Python自动化实战:常用的类库和使用场景

写在前面

搞Python自动化这些年,我有一个感受:工具不在多,在于你真正用过、踩过坑、还愿意继续用的。

网上不缺"Python自动化十大库"这类清单文,但大多数读完就忘——因为它们只告诉你"有什么",不告诉你"什么场景下真的好用"。

这篇文章不讲大道理,只聊我在实际工作中反复用到的Python自动化项目,以及它们各自最擅长的场景。每个方向我都会给出真实使用感受,包括它好在哪里、坑在哪里。

如果你也厌倦了复制粘贴式的工具清单,这篇可能对你有点用。


一、文件与目录处理:pathlib + shutil

为什么不用os.path?

说实话,2026年了,如果你还在写 os.path.join('a', 'b', 'c'),是时候升级了。

pathlib 从Python 3.4引入,到今天已经是标准库中最优雅的文件路径处理方案。面向对象的写法,链式调用,可读性碾压 os.path 系列。

  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 是最直接的选择。

  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模式显得笨重。

  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 是最轻量的组合。

  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 才是正确的选择。

  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的库很多——xlrdxlwtpandasopenpyxl。但如果你需要读写xlsx、设置格式、合并单元格、插入图表openpyxl 是最全面的。

  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 可以帮你把模板替换做到自动化。

  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 是最直接的方案。

  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自带的 schedcron 都能用,但 schedule 库的API设计简直是艺术品——人类可读的链式调用

  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 BeatAPScheduler,别在 schedule 上硬扛。


七、运维脚本:Fabric

需要SSH到多台服务器执行命令、部署代码?Fabric 把这事儿简化成了几行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做自动化,欢迎在评论区分享你的实战经验——我始终相信,最好的工具清单来自真实使用者的交流,而不是搜索引擎的聚合结果。

 

2026-08-10 09:53:15【出处】:https://www.cnblogs.com/badhope/p/22357737/python-automation-projects-2026

=======================================================================================

posted on 2026-08-10 09:54  jack_Meng  阅读(12)  评论(0)    收藏  举报

导航