# capture-无头浏览器+ORC **Repository Path**: sprouting/capture ## Basic Information - **Project Name**: capture-无头浏览器+ORC - **Description**: 无头浏览器+ORC实现爬虫 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-07 - **Last Updated**: 2026-03-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 📚 小说爬虫管理系统 一个基于 Java + Playwright + Vue.js 的轻量级小说爬虫系统,支持 Web 界面配置和实时进度监控。 --- ## ✨ 特性亮点 ✅ **Web 管理界面** - 无需编写代码,浏览器直接配置 ✅ **实时进度监控** - 轮询方式,轻量级实时更新 ✅ **双模式支持** - 列表模式 + 自动连续模式 ✅ **可视化日志** - 爬取过程一目了然 ✅ **随时启停** - 支持任务停止控制 ✅ **断点续传** - 支持从中断处继续爬取 ✅ **Hutool Cache** - 基于 Hutool 的定时缓存,自动过期 ✅ **阿里巴巴规范** - 代码符合阿里开发手册 ✅ **轻量化设计** - 禁用图片/字体,低内存占用 --- ## 🚀 快速开始 ### 环境要求 - Java 21+ - Maven 3.6.3+(建议 3.9+) - Node.js(可选,仅前端开发需要) ### 第一步:安装依赖 ```bash cd e:\kaiFa\IDEATest\capture mvn clean install ``` ### 第二步:安装 Playwright 浏览器 ⭐ 首次使用前,需要下载 Chromium 浏览器核心(约 280MB)。系统会在启动时自动检查并安装,你也可以选择手动安装。 #### **方式一:自动安装(推荐)** 从 v1.0.0 开始,应用启动时会自动检查并安装浏览器! **启动应用:** ```bash mvn spring-boot:run ``` **首次启动日志:** ``` 2026-03-07 10:00:00 INFO - 正在检查 Playwright 浏览器... 2026-03-07 10:00:01 WARN - ⚠️ 浏览器未安装,正在自动安装 Chromium... 2026-03-07 10:00:01 WARN - ⏱️ 这可能需要几分钟,请耐心等待... [下载进度条...] 2026-03-07 10:02:30 INFO - ✅ 浏览器安装成功! ``` **优点:** - ✅ 零配置 - ✅ 自动检测 - ✅ 显示详细日志 - ✅ 失败有提示 #### **方式二:手动安装(备用)** 如果自动安装失败,可以手动执行: ```bash cd e:\kaiFa\IDEATest\capture mvn exec:java -e "-Dexec.mainClass=com.microsoft.playwright.CLI" "-Dexec.args=install chromium" ``` #### **方式三:指定位置安装(推荐长期使用)** 如果你希望将浏览器安装到指定位置(如 D 盘),避免每次重新下载,请按以下步骤操作: ##### **步骤 1:创建安装目录** ```powershell # 在 D 盘创建浏览器安装目录 mkdir D:\kaiFa\PlaywrightBrowsers ``` ##### **步骤 2:设置系统环境变量** 本项目支持两种方式指定浏览器安装目录(优先级:环境变量 > 配置文件): - 环境变量:`PLAYWRIGHT_BROWSERS_PATH` - 配置文件:`application.properties` 中的 `playwright.browsers-path` 示例(配置文件方式): ```properties playwright.browsers-path=D:/kaiFa/PlaywrightBrowsers ``` **方法 A:通过 Windows 图形界面(永久生效)** 1. 右键"此电脑" → "属性" → "高级系统设置" 2. 点击"环境变量"按钮 3. 在"系统变量"区域,点击"新建" 4. 输入: - **变量名**:`PLAYWRIGHT_BROWSERS_PATH` - **变量值**:`D:\kaiFa\PlaywrightBrowsers` 5. 点击"确定"保存 **方法 B:通过 PowerShell 命令(管理员权限)** ```powershell # 以管理员身份运行 PowerShell [System.Environment]::SetEnvironmentVariable("PLAYWRIGHT_BROWSERS_PATH", "D:\kaiFa\PlaywrightBrowsers", "Machine") ``` ##### **步骤 3:验证环境变量** ```powershell # 打开新的 PowerShell 窗口(重要:必须是新窗口才能读取新环境变量) $env:PLAYWRIGHT_BROWSERS_PATH ``` 应该输出:`D:\kaiFa\PlaywrightBrowsers` ##### **步骤 4:查看 Chromium 版本与下载地址(离线安装必看)** Playwright 会固定使用对应版本的 Chromium(本项目 Playwright Java 版本为 1.40.0)。 你可以用 dry-run 查看本机需要的 Chromium build 号、安装目录、下载地址: ```powershell cd e:\kaiFa\IDEATest\capture mvn exec:java -e "-Dexec.mainClass=com.microsoft.playwright.CLI" "-Dexec.args=install --dry-run chromium" ``` 示例输出(会显示下载地址与安装目录): ``` browser: chromium version 120.0.6099.28 Install location: D:\kaiFa\PlaywrightBrowsers\chromium-1091 Download url: https://playwright.azureedge.net/builds/chromium/1091/chromium-win64.zip Download fallback 1: https://playwright-akamai.azureedge.net/builds/chromium/1091/chromium-win64.zip Download fallback 2: https://playwright-verizon.azureedge.net/builds/chromium/1091/chromium-win64.zip ``` ##### **步骤 5:安装浏览器** 现在执行安装命令,浏览器会自动下载到 D 盘: ```powershell cd e:\kaiFa\IDEATest\capture $env:PLAYWRIGHT_BROWSERS_PATH="D:\kaiFa\PlaywrightBrowsers" mvn exec:java -e "-Dexec.mainClass=com.microsoft.playwright.CLI" "-Dexec.args=install chromium" ``` ##### **步骤 6:验证安装** 安装完成后,检查目录结构: ```powershell dir D:\kaiFa\PlaywrightBrowsers ``` 应该看到类似这样的结构: ``` D:\kaiFa\PlaywrightBrowsers\ ├── chromium-xxxx\ │ ├── chrome-win\ │ │ ├── chrome.exe │ │ └── ... │ └── ... └── .links\... ``` ##### **验证项目能否找到浏览器** 启动应用测试: ```powershell cd e:\kaiFa\IDEATest\capture mvn spring-boot:run ``` 查看日志,如果出现以下内容说明成功: ``` INFO - ✅ Playwright 浏览器已安装 INFO - 正在初始化 Playwright 浏览器... ``` **优势总结:** - ✅ **一次安装,永久使用** - 不会每次启动都重新安装 - ✅ **位置自定义** - 完全由你控制安装位置 - ✅ **无需额外配置** - 项目自动识别 - ✅ **多项目共享** - 所有 Playwright 项目都能使用该浏览器 --- ### 📦 浏览器安装详情 #### **下载大小** - **Chromium 浏览器**:约 280MB - **Firefox 浏览器**:约 80MB(可选) - **WebKit 浏览器**:约 50MB(可选) #### **默认安装位置** ``` Windows: C:\Users\你的用户名\AppData\Local\ms-playwright\ Mac/Linux: ~/.cache/ms-playwright/ ``` #### **为什么不能用 WebDriverManager?** Playwright 使用的是专用优化的 Chromium 版本,这与 Selenium 不同: | 特性 | Selenium | Playwright | |------|----------|-----------| | **浏览器来源** | 使用系统安装的 Chrome | 下载专用 Chromium | | **版本管理** | 需要 ChromeDriver 匹配 | 版本固定,自动匹配 | | **兼容性** | 可能出现版本不匹配 | 100% 兼容 | | **优化** | 通用浏览器 | 针对自动化优化 | WebDriverManager 是为 Selenium 设计的,它下载的是 ChromeDriver(驱动程序),而 Playwright 需要的是完整的浏览器二进制文件。 ### 第三步:启动应用 ```bash # 方式 1: Maven 运行 mvn spring-boot:run # 方式 2: IDEA 直接运行 CaptureApplication.java ``` 启动成功后,访问入口: - 首页:`http://localhost:8029/` - 小说爬虫页面:`http://localhost:8029/crawler/page` - Swagger UI:`http://localhost:8029/swagger-ui.html` 说明: - 端口来自 [application.properties](file:///e:/kaiFa/IDEATest/capture/src/main/resources/application.properties#L20-L23):默认 `server.port=8029` - 本项目默认未设置 `server.servlet.context-path`(即根路径为空);如果你自行改了 context-path,上面的 URL 需要加上对应前缀 --- ## 📖 使用教程 ### 1️⃣ 访问管理页面 打开浏览器访问: ``` http://localhost:8029/crawler/page ``` ### 2️⃣ 选择爬取模式 #### **📋 列表模式**(推荐) - **适用场景**:有明确章节目录页的网站 - **优点**:一次性获取所有章节,可精确控制 - **示例**:笔趣阁目录页 #### **🔄 自动模式** - **适用场景**:没有目录页,或你只知道“正文页” - **优点**:从当前章节开始,通过“下一章”链接连续跳转 - **示例**:直接从第一章(正文页)开始爬 ### 3️⃣ 断点续传(新功能) 如果爬取过程中断或需要停止,系统会自动保存进度。 **恢复步骤:** 1. 页面加载时自动检测未完成的任务 2. 显示可恢复的任务列表 3. 点击“🔄 从此处继续”按钮 4. 系统自动填充配置并从上次中断处继续 **特性:** - ✅ 自动保存已完成的章节 - ✅ 跳过已爬取的章节 - ✅ 保留 24 小时(自动过期) ### 4️⃣ 填写配置参数 #### **必填参数** - **起始 URL**: - 列表模式:填写“目录页 URL”(页面上能看到很多章的链接) - 自动模式:填写“任意正文页/第一章 URL”(页面上需要能找到“下一章/下一页”的链接) #### **可选参数**(已有默认值) | 参数 | 默认值 | 说明 | |------|--------|------| | 小说标题 | 自动生成 | 用于保存文件 | | 正文选择器 | `#content` | 大多数网站适用 | | 章节列表选择器 | `#list dl dd a` | 笔趣阁类 | | 章节翻页选择器(下一页) | `#next_url` | 同一章被拆成多页时使用(章节内翻页) | | 下一章按钮选择器 | `.next` | 自动模式用(跨章节跳转) | | 输出目录 | `./novels/` | 截图保存位置 | | 最大章节数 | `-1` | 不限制 | | 无头模式 | `✓` | 不显示浏览器 | ### 5️⃣ 章节预览(列表模式强烈建议) 列表模式下建议先点一次“🔍 章节预览”: - 后端会从目录页解析出章节链接列表(并尝试从多个“目录区域”中挑选最像目录的一组) - 预览结果支持全选/反选/清空,也支持切换不同的目录分组(`chapterGroupKey`) - 点击“🚀 开始爬取”时,前端会把你勾选的章节作为 `selectedChapters` 传给后端,后端将只爬这些章 ### 6️⃣ 点击"开始爬取" - 系统返回 Task ID - 前端自动开始轮询(每 2 秒一次) - 实时显示进度条和日志 - 可随时点击"停止任务" ### 7️⃣ 查看结果 爬取完成后,在输出目录查看结果(默认 `./novels/`): - 截图文件:每章至少 1 张;如果同一章被拆成多页,会生成 `_p2/_p3...` 后缀的截图 - OCR 文本:会持续追加写入同目录下的 `小说名.txt` 示例: ``` ./novels/斗破苍穹/chapter_1_第一章.png ./novels/斗破苍穹/chapter_1_第一章_p2.png ./novels/斗破苍穹/chapter_2_第二章.png ... ./novels/斗破苍穹/斗破苍穹.txt ``` --- ## 🎯 实战案例 ### 案例 1:爬取笔趣阁小说 **配置参数:** ``` 起始 URL: https://www.biquge.com/novel/123/ 小说标题:斗破苍穹 爬取模式:列表模式 正文选择器:#content 章节列表选择器:#list dl dd a 下一章按钮选择器:.next 最大章节数:100 无头模式:✓ 勾选 ``` ### 案例 2:自动连续爬取 **配置参数:** ``` 起始 URL: https://www.example.com/novel/chapter1.html 小说标题:绝世唐门 爬取模式:自动模式 正文选择器:#content 下一章按钮选择器:.btn-next 最大章节数:50 无头模式:✓ 勾选 ``` ### 案例 3:调试模式(显示浏览器) **配置参数:** ``` 起始 URL: https://www.biquge.com/novel/123/ 爬取模式:列表模式 无头模式:✗ 不勾选 ``` > 💡 提示:调试模式可以看到浏览器操作过程,适合排查问题 --- ## ⚙️ 高级配置 ### 常见网站选择器参考 #### **笔趣阁类网站** ```css 正文选择器:#content 章节列表:#list dl dd a 下一章:.next ``` #### **通用选择器** ```css 正文区域: #content, .read-content, .novel-content, .chapter-content 章节列表: .chapter-list li a, ul.chapter-list a, #chapter-list a 下一章按钮: .next, .btn-next, [rel="next"], a:contains("下一章") ``` ### 自定义选择器技巧 1. **打开浏览器开发者工具**(F12) 2. **使用元素选择器**(Ctrl+Shift+C) 3. **找到目标元素的 CSS 类名或 ID** 4. **复制到配置中** 5. 如果复制出来带有 `:nth-child(1)`、`:nth-of-type(1)`、`[1]` 之类的序号,通常只会命中“某一个章节链接”,删掉序号即可匹配整页 --- ## 🔧 技术架构 ### 后端技术栈 - **Spring Boot 3.5.4** - 核心框架 - **Playwright Java 1.40.0** - 无头浏览器 - **Hutool Cache** - 定时缓存 - **MyBatis-Plus 3.5.12** - ORM 框架 - **Druid 1.2.23** - 连接池 - **Freemarker** - 模板引擎 ### 前端技术栈 - **Vue 3.5.27** (CDN) - 响应式框架 - **原生 JavaScript** - 轮询 API - **CSS3** - 渐变动画 ### 核心组件 ``` com.sprouting.capture/ ├── controller/ │ ├── base/HtmlBaseController # 页面入口(/crawler/page) │ └── crawler/CrawlerController # 爬虫 API(/crawler/...) ├── service/crawler/ │ ├── AsyncNovelCrawlService # 异步爬取主流程(任务/进度/恢复) │ ├── BrowserManager # Playwright 生命周期与拦截 │ ├── ChapterExtractor # 章节列表解析 + 截图 + OCR + 章节内翻页 │ └── NextPageDetector # 下一章/下一页检测与跳转链接解析 └── cache/ ├── ProgressCacheManager # 进度缓存(默认 1 小时过期) └── TaskResumeManager # 任务恢复缓存(默认 24 小时过期) ``` --- ## 📊 API 接口 ### RESTful API #### 1. 开始爬取 ```http POST /crawler/start Content-Type: application/json { "startUrl": "https://example.com/novel/123/", "novelTitle": "斗破苍穹", "contentSelector": "#content", "chapterListSelector": "#list dl dd a", "nextPageSelector": "#next_url", "nextButtonSelector": ".next", "outputDir": "./novels/", "headless": true, "maxChapters": 100, "crawlMode": "LIST" } ``` **响应:** ```json { "code": 200, "message": "success", "data": "TASK_20260307120000_abc12345" } ``` #### 2. 获取进度(轮询) ```http GET /crawler/progress/{taskId} ``` **响应:** ```json { "code": 200, "message": "success", "data": { "taskId": "TASK_20260307120000_abc12345", "status": "RUNNING", "currentChapter": 5, "totalChapters": 100, "progress": 5.0, "currentUrl": "https://example.com/novel/chapter5.html", "message": "正在爬取:第五章 修炼" } } ``` 说明:`currentTitle` 字段为可选字段,是否返回取决于具体实现/版本,建议以前端展示的 `message` 为准。 #### 3. 停止任务 ```http POST /crawler/stop/{taskId} ``` #### 4. 查询状态 ```http GET /crawler/status/{taskId} ``` #### 5. 章节预览(列表模式) ```http POST /crawler/preview Content-Type: application/json ``` #### 6. 获取可恢复任务列表 ```http GET /crawler/resume-tasks ``` --- ## 🗄️ 缓存机制 ### Hutool TimedCache 使用 Hutool 的定时缓存实现进度存储: ```java // 初始化(1 小时过期) TimedCache cache = CacheUtil.newTimedCache(Duration.ofHours(1).toMillis()); // 放入缓存 cache.put(taskId, progress); // 获取进度 ProgressDTO progress = cache.get(taskId); // 自动过期清理 ``` **特性:** - ✅ 自动过期(默认 1 小时) - ✅ 线程安全 - ✅ 高性能 - ✅ 零配置 --- ## 📝 配置文件 ### application.properties ```properties # 服务器配置 server.port=8029 server.servlet.context-path= # 爬虫线程池配置 crawler.thread.pool.core=1 crawler.thread.pool.max=5 crawler.thread.pool.queue=10 crawler.thread.pool.keepAlive=300 # Freemarker 配置 spring.freemarker.cache=false spring.freemarker.template-loader-path=classpath:/templates/ # Playwright 浏览器安装目录(也可用环境变量 PLAYWRIGHT_BROWSERS_PATH 覆盖) playwright.browsers-path=D:/kaiFa/PlaywrightBrowsers ``` --- ## 🐛 常见问题 ### Q1: 浏览器下载失败或速度慢? **解决方案 1:使用国内镜像(推荐)** 更推荐在 Maven 的 `settings.xml` 配置 mirror(不建议把镜像写进 pom,以免影响团队/CI 环境): ```xml aliyun * Aliyun Maven https://maven.aliyun.com/repository/public ``` **解决方案 2:手动安装** ```bash mvn exec:java -e "-Dexec.mainClass=com.microsoft.playwright.CLI" "-Dexec.args=install chromium" ``` **解决方案 3:指定位置安装** 参考上方「方式三:指定位置安装」章节。 **解决方案 4:检查网络** ```bash ping maven.aliyun.com ``` **解决方案 5:离线安装** 1. 在有网络的机器上,先用 dry-run 确认 build 号与安装目录(例如 `chromium-1091`)以及下载地址: - `mvn exec:java -e "-Dexec.mainClass=com.microsoft.playwright.CLI" "-Dexec.args=install --dry-run chromium"` 2. 下载 zip(示例:`https://playwright-akamai.azureedge.net/builds/chromium/1091/chromium-win64.zip`),解压后把 `chrome-win` 放到目标目录: - 期望结构(以 1.40.0 对应 build 1091 为例): - `D:\kaiFa\PlaywrightBrowsers\chromium-1091\chrome-win\chrome.exe` - 如果你解压到了 `D:\kaiFa\PlaywrightBrowsers\chromium-win64\chrome-win`,需要把外层目录改名/调整为 `chromium-1091` 3. (推荐)如果离线环境允许先在在线机器执行一次安装,再拷贝整个目录到离线机,最稳妥: - 在线机器设置 `PLAYWRIGHT_BROWSERS_PATH=D:\kaiFa\PlaywrightBrowsers` 后执行:`mvn exec:java -e "-Dexec.mainClass=com.microsoft.playwright.CLI" "-Dexec.args=install chromium"` - 拷贝整个 `D:\kaiFa\PlaywrightBrowsers` 到离线机器同一路径 4. 离线机器启动前确保能读到该目录: - 环境变量可选:`PLAYWRIGHT_BROWSERS_PATH=D:\kaiFa\PlaywrightBrowsers` - 本项目代码默认使用 `D:\kaiFa\PlaywrightBrowsers`,即使不配环境变量也会走该目录 --- ### Q1-1: 防火墙/代理问题 **设置 HTTP 代理:** ```bash mvn exec:java -e \ "-Dexec.mainClass=com.microsoft.playwright.CLI" \ "-Dexec.args=install chromium" \ "-Dhttp.proxyHost=proxy.example.com" \ "-Dhttp.proxyPort=8080" ``` --- ### Q1-2: Windows Defender 报毒 **问题:** Chromium 可能被误报为恶意软件 **解决方案:** 1. 添加排除目录:`C:\Users\你的用户名\AppData\Local\ms-playwright\` 或你指定的安装目录 2. 或者临时关闭实时防护 3. 从 Microsoft 官方源下载 --- ### Q2: 页面打不开? **解决**: 1. 检查应用是否正常启动 2. 确认端口号 8029 未被占用 3. 查看控制台日志 ### Q3: 爬取失败? **可能原因**: - 网络连接问题 - 网站反爬机制 - CSS 选择器不匹配 **解决方法**: 1. 检查起始 URL 是否能正常访问 2. 尝试调整选择器 3. 使用调试模式查看问题 ### Q4: 进度条不动? **解决**: 1. 轮询可能中断 2. 刷新页面重新轮询 3. 查看浏览器控制台错误 ### Q5: 找不到章节? **解决**: 1. 检查章节列表选择器 2. 切换到自动模式 3. 手动查找正确的选择器 ### Q6: 内存占用高? **解决**: 1. 启用无头模式 2. 调小并发数 3. 减少同时运行的任务数 --- ## 💡 最佳实践 ### 1. 选择合适的模式 - 有目录页 → 列表模式 - 无目录页 → 自动模式 ### 2. 配置优化 - 生产环境:无头模式 + 大并发 - 调试环境:显示浏览器 + 小并发 ### 3. 批量爬取 可以同时启动多个任务,但要注意: - 不要超过线程池最大线程数 - 避免被目标网站封 IP ### 4. 错误处理 - 遇到失败先查看日志 - 使用调试模式复现问题 - 适当增加延迟避免被封 --- ## 🔍 调试技巧 ### 1. 查看日志 ```bash # 控制台输出详细信息 logging.level.com.sprouting.capture=debug ``` ### 2. 断点调试 在关键方法打断点: - `AsyncNovelCrawlService.startCrawl()` - `ChapterExtractor.extractAllChapters()` - `BrowserManager.initialize()` ### 3. 网络监控 浏览器 DevTools → Network → 查看轮询请求 ### 4. 缓存查看 ```java // 添加临时日志 log.info("当前缓存大小:{}", progressCacheManager.size()); ``` --- ## 📈 性能指标 | 指标 | 数值 | |------|------| | 启动时间 | ~2-3 秒 | | 单章爬取 | ~1-2 秒 | | 内存占用 | ~200-300MB | | 轮询间隔 | 2 秒 | | 缓存过期 | 1 小时 | | 并发支持 | 5 个任务 | --- ## 🎨 界面预览 ### 配置区域 - 两种模式切换卡片 - 表单输入(带验证) - 提示信息 ### 进度区域 - 进度条动画 - 状态信息卡片(4 个) - 实时日志(自动滚动) ### 完成状态 - ✅ 成功 / ❌ 失败 - 统计信息 - 耗时显示 --- ## 📦 打包部署 ### 打包 ```bash mvn clean package -DskipTests ``` ### 运行 JAR ```bash java -jar target/capture.jar ``` ### 后台运行 ```bash nohup java -jar target/capture.jar > crawler.log 2>&1 & ``` --- ## 🎉 下一步计划 - [ ] 支持批量导入 URL - [ ] 增加 OCR 识别集成 - [ ] 支持导出 TXT/EPUB - [ ] 添加代理 IP 池 - [ ] 可视化选择器编辑器 - [ ] 定时任务调度 - [ ] 数据统计分析 --- ## 📞 技术支持 遇到问题可以: 1. 查看控制台日志 2. 检查浏览器网络请求 3. 使用调试模式排查 4. 联系开发团队 --- ## 📄 开发手册 ### 代码规范 遵循阿里巴巴 Java 开发手册: - 类名:大驼峰(CrawlerController) - 方法:小驼峰(startCrawl) - 常量:全大写(DEFAULT_TIMEOUT) - 注释:完整清晰 - 异常:try-catch 处理 ### 扩展开发 #### 添加新的爬取策略 ```java @Service public class CustomCrawlService { @Async("crawlerExecutor") public String startCustomCrawl(CrawlConfig config) { // 自定义逻辑 } } ``` #### 添加新的缓存策略 ```java @Component public class CustomCacheManager { private TimedCache cache; // 自定义缓存逻辑 } ``` --- ## 🏆 项目亮点 1. **轻量化设计** - 禁用图片/字体,小视口配置 2. **智能识别** - 3 级策略查找下一章 3. **轮询机制** - 替代 WebSocket,更轻量 4. **Hutool Cache** - 自动过期,零维护 5. **模块化设计** - Browser/Parser/Service 分离 6. **实时日志** - 滚动显示,用户体验好 --- ## 🙏 致谢 感谢以下开源项目: - [Playwright Java](https://playwright.dev/java/) - [Hutool](https://hutool.cn/) - [Spring Boot](https://spring.io/projects/spring-boot) - [Vue.js](https://vuejs.org/) --- ## 📝 更新日志 ### v1.0.0 (2026-03-07) - ✅ 初始版本发布 - ✅ Web 管理界面 - ✅ 实时进度监控(轮询) - ✅ Hutool Cache 集成 - ✅ 双模式支持 - ✅ 阿里巴巴规范 --- **祝你使用愉快!** 📚✨