9 个自动化互联网的 Python 库,最后一个太离谱
11 点 36,群里甩来一句:把客户门户这个月的发票全拉下来,按公司名归档,12 点前发邮箱。 这种需求我第一眼一般不先开 Selenium。浏览器一跑,资源先上去;验证码一来,脚本先废;最后人还得守着看。真要把互联网自动化做顺手,关键不是“会不会点页面”,而是知道这活到底该走表单、接口、邮箱,还是任务队列。
先说 9 个我觉得真能干活的库。
1. MechanicalSoup老系统、政府站、后台管理页,这种表单型网站很多根本用不上整套浏览器。能直接填表、提交流程的,我更愿意用它,轻得多。
import mechanicalsoupbrowser = mechanicalsoup.StatefulBrowser(user_agent="invoice-bot/1.0")
browser.open("https://portal.example.com/login")
browser.select_form('form[action="/signin"]')
browser["account"] = "finance_bot"
browser["password"] = secret
browser.submit_selected()
pdf_links = [a["href"] for a in browser.page.select("a[data-role='invoice-pdf']")]
2. httpx很多人自动化还停在 requests。不是不能用,是一到超时、连接池、重试、异步混用这些活儿,httpx 顺手得多。尤其你要同时调登录接口、下载接口、上传接口时,它比老写法省很多脏代码。
3. aiohttp一次拉 300 家店铺报表,最怕的不是代码不会写,是你一个个等响应,把自己等睡着。批量抓页面、批量探活、批量取 JSON,这种 I/O 密集型任务,aiohttp 上来就对了,别拿串行脚本硬顶。
4. Playwright只要页面一堆 JavaScript,按钮点完还得等异步请求回填,我基本直接上 Playwright。它比 Selenium 稳,元素等待也没那么玄学,尤其下载文件这块,真省事。
from playwright.sync_api import sync_playwrightwith sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
page.goto("https://portal.example.com/bill", wait_until="networkidle")
with page.expect_download() as task:
page.get_by_role("button", name="导出发票").click()
task.value.save_as("/data/invoice/april.zip")
browser.close()
5. Pyppeteer这玩意我现在不当主力,但老项目里还真能见到。它适合接 Chromium 底层能力,做截图、录屏、页面调试有时还挺顺。新项目我一般优先 Playwright,少踩坑,维护心智负担也低一点。
6. Huey自动化不是脚本跑通就完了,第二天 11 点 50 能不能自己准时跑,才是正经事。Huey 这种轻量任务队列很适合“小而准”的定时活,尤其是“中午前整理并发邮箱”这类日常任务。
from huey import RedisHuey, crontabhuey = RedisHuey("ops")
@huey.periodic_task(crontab(hour="11", minute="40"))
defsend_invoice_pack():
fetch_from_portal()
pack_by_company()
mail_to_finance()
7. Imbox很多人一听“自动下载发票”,脑子里全是网页。其实不少供应商发票根本不在网页里,在邮箱附件里躺着。这个时候别再爬页面了,直接 IMAP 拉附件,逻辑干净得多。
from imbox import Imboxwith Imbox("imap.example.com", username=user, password=token, ssl=True) as box:
for _, mail in box.messages(unread=True, sent_from="[email protected]"):
for att in mail.attachments:
with open(f"/data/invoice/{att['filename']}", "wb") as f:
f.write(att["content"].read())
8. Telethon这类库更像遥控器。你不是在调一个 HTTP 接口,而是在接管消息流。做频道归档、自动提醒、消息审计挺猛。但这类自动化边界要清楚,能走官方 Bot 能力就先走官方的,别一上来就把客户端协议当常规方案。
9. youtube-search-python最后这个确实有点离谱。你不想先配一堆 API Key,只想先把搜索结果拉回来做个内部验证,它很好使。做教程推荐、关键字监控、内容采样都很快。问题也在这:快是快,别拿它直接当生产基建,正式项目该走官方接口还是得走,不然后面页面结构一变,脚本就给你表演当场去世。
真把互联网自动化做下来,套路其实没那么花:能直接发请求,就别起浏览器;能批量并发,就别一个个等;数据明明在邮箱里,就别死盯前端页面;脚本要每天跑,就别手搓 while True。 库不是越炫越好,能把中午那封邮件准时发出去的,才算真本事。