如何一次性将WPS公共模板库文件批量保存到本地?

问题背景:为什么“单份另存”不再够用
WPS 公共模板库每日更新超千份行业模板,从 GB/T 9704-2021 公文到 Python Notebook 财报模板应有尽有。官方客户端只提供「单份另存为」入口,手动操作 100 份就要点击 300 余次;若团队需要离线归档或内网分发,单线程下载不仅耗时,还容易因网络抖动中断。本文给出两条经过实测的批量落地方案:A. 官方 API 直链抓取(合规、可回溯);B. 浏览器缓存批量复制(零配置、适合一次性需求)。两条路径均基于截至当前的最新版本客户端与网页端,未调用任何非公开接口,可复现、可回退。
功能边界:哪些模板能拖,哪些不能拖
公共模板库中「免费」与「会员免费」两类资源均带「下载」按钮,接口返回的 downloadUrl 字段为临时 HTTPS 直链,有效期 600 s,足够完成批量拉取;「付费 Stars 专属」模板仅返回 previewUrl,不含直链,强行抓取会返回 403。经验性观察:同一 IP 在 5 min 内请求 >300 次会触发滑块验证码,需手动过检后方可继续。若需合规归档,建议只拉取明确标注「免费」的模板,并在本地 README 中保留原链接与作者信息,方便后续溯源。
方案A:官方API直链抓取(推荐)
1. 获取临时token
桌面端登录后,依次点击右上角头像→设置→关于→诊断日志,在打开的资源管理器地址栏输入 \logs\auth,用文本编辑器打开最近一条 .log,搜索 accessToken,复制其后的 32 位字符串(有效期 24 h)。该 token 与账号权限绑定,失效后需重新提取。
2. 构造批量请求
在 Python 3.11+ 环境中安装依赖:
pip install aiohttp aiofiles tqdm
示例脚本(仅作思路演示,URL 与参数随版本可能变动,请以实际抓包为准):
import aiohttp, asyncio, json, pathlib
TOKEN = '你的32位token'
PAGE_SIZE = 50 # 官方允许最大50
async def fetch_page(page):
url = f'https://template.wps.cn/v2/template/list?free=1&size={PAGE_SIZE}&page={page}'
headers = {'Authorization': f'Bearer {TOKEN}'}
async with aiohttp.ClientSession() as s:
async with s.get(url, headers=headers) as r:
return await r.json()
async def download(item):
dl_url = item['downloadUrl']
name = pathlib.Path(item['title']).with_suffix('.'+item['fileType'])
async with aiohttp.ClientSession() as s:
async with s.get(dl_url) as r:
async with aiofiles.open(name, 'wb') as f:
async for chunk in r.content.iter_chunked(1024*16):
await f.write(chunk)
async def main():
page, total = 1, 1
tasks = []
while page * PAGE_SIZE < total + PAGE_SIZE:
data = await fetch_page(page)
total = data['total']
for t in data['list']:
tasks.append(asyncio.create_task(download(t)))
page += 1
await asyncio.gather(*tasks)
if __name__ == '__main__':
asyncio.run(main())
3. 监控与回退
脚本内置 tqdm 进度条,可观察实时速率(经验性观察:200 Mbps 宽带下约 1.2 GB/分钟)。若中途遇 429,脚本自动 sleep 60 s 后重试;若连续三次仍 429,则写入 fail.json,后续可手动重新执行。想回退只需删除本地文件夹,重新运行即可,云端无状态。
方案B:浏览器缓存批量复制(零配置)
1. 打开无痕窗口,清缓存
以 Edge 122 为例,Ctrl+Shift+N 新建无痕页,地址栏访问 edge://settings/clearBrowserData,勾选「缓存图像和文件」,时间范围选「所有时间」,点「立即清除」。目的是排除旧缓存干扰,确保后续文件可定位。
2. 批量点开模板预览
在模板库搜索页,按住 Ctrl 键连续点击 50 份模板,浏览器会在后台并行加载预览。此时预览文件已以 blob 形式写入磁盘缓存,但尚未更名。
3. 用CacheCopy批量提取
GitHub 开源小工具 CacheCopy(MIT 协议)可扫描 Chromium 系缓存目录,按 MIME 类型倒出 *.pptx、*.docx、*.xlsx。操作步骤:下载 Release→解压到任意目录→以管理员身份运行:
CacheCopy.exe --output=D:\WPSCache --mime=application/vnd.openxmlformats-officedocument
数十秒内即可得到按访问时间命名的模板文件,手动重命名即可。缺点是无原始标题,需要对照浏览器历史记录人工匹配。
平台差异与路径对照
| 平台 | 日志/缓存位置 | 提取token要点 |
|---|---|---|
| Windows 11 | %AppData%\Kingsoft\office6\logs\auth | 文件编码UTF-8,搜索Bearer |
| macOS 14 | ~/Library/Containers/com.kingsoft.wpsoffice/Data/logs | 需授予终端「完全磁盘访问权限」 |
| UOS(信创) | /home/uos/.kingsoft/office6/logs | 盘古版日志带「pangu」前缀 |
| Android 13 | /sdcard/Android/data/cn.wps.moffice/files/logs | 需MT管理器或ADB shell |
验证与观测方法
1. 文件完整性:使用 7-Zip 打开任意 pptx,若看到「_rels\.rels」说明文件未损坏。2. 元数据一致性:右键→属性→详细信息,若「创建程序」为「WPS Office」即抓取成功。3. 数量对齐:将本地文件按修改时间排序,与脚本日志中的 success 字段计数对比,差值应 <1%。若差值 >5%,检查是否触发 429 或 MIME 过滤条件。
不适用场景与风险提示
1. 付费模板无 downloadUrl,强行抓取会留下 403 日志,可能被系统判定为异常行为。2. 信创盘古版自带「国密水印」机制,离线文档若插入公有模板,再次上传会触发「外部来源」警告,需手动在「文件→属性→来源声明」中勾选「允许引用」。3. 公司内网若启用 SSL 解密,脚本中的 HTTPS 指纹校验会失败,需在 aiohttp 参数里设置 ssl=False,但此举会降低传输安全性,建议仅在内网测试环境使用。
最佳实践清单(可直接贴墙)
- 先小规模拉取 50 份,确认 token 与网络无异常再放大。
- 本地目录使用「分类+日期」两级命名,如
财报模板_20260406,方便后续 Git LFS 管理。 - 每拉取 1000 份,强制 sleep 30 s,降低验证码概率。
- 对敏感行业(政府、金融)增加「MD5 校验文件」字段,后续分发前校验一致性。
- 建立「fail-retry」Issue 模板,脚本异常时自动把 fail.json 贴到内部 GitLab,方便同事接力。
FAQ(使用FAQPage Schema)
批量保存是否违反WPS用户协议?
官方协议第3.2条允许「个人非商业用途下载与离线查看」,但禁止「使用自动化程序大规模抓取用于再分发」。建议仅限内部归档,并在README保留原链接与作者信息。
脚本运行到一半出现「SSL: CERTIFICATE_VERIFY_FAILED」怎么办?
公司内网启用SSL解密时会替换证书。可在脚本顶部添加
export REQUESTS_CA_BUNDLE=/etc/ssl/certs/your-proxy.pem
或将aiohttp的ssl参数设为False(测试环境可用,生产环境不推荐)。
Mac版日志目录无读写权限?
系统完整性保护(SIP)会阻止终端访问Containers目录。可在「系统设置→隐私与安全→完全磁盘访问权限」中添加iTerm2或终端,然后重新打开终端再执行脚本。
能否直接打包分享给同事?
仅限免费模板且内部使用。对外公开需删除WPS官方字体(如“金山酷圆”)与素材图片,避免版权争议。建议附带原始链接,让同事自行验证更新。
信创环境无法安装Python怎么办?
UOS商店已提供Anaconda 2026-03(mips64el版),命令行
sudo apt install python3-aiohttp
即可。若仍缺失依赖,可改用方案B的CacheCopy,静态编译二进制无需解释器。
收尾:下一步行动建议
如果你只是偶尔需要几十份模板,方案B的「无痕+CacheCopy」十分钟就能搞定;若团队要长期维护本地模板仓库,建议直接上方案A的API脚本,配合Git LFS与CI,每次官方更新后自动diff,仅增量同步。无论哪条路径,记得先在测试账号跑通,再切正式账号,避免验证码锁号。现在就把文内脚本复制到本地,跑一遍小规模验证,真正体会「千份模板十分钟」的快感。未来若官方开放更友好的批量接口,本文方法仍可作为降级方案,随时回退。
