调整了默认下载线程和等待时间
避免阿里盾检测
This commit is contained in:
@@ -1,16 +1,10 @@
|
|||||||
# FreePEP 📚 人教社中小学电子教材批量下载器
|
# FreePEP 📚 人教社中小学电子教材批量下载器
|
||||||
|
|
||||||
[](https://opensource.org/licenses/MIT)
|
[](https://opensource.org/licenses/MIT)
|
||||||
|
|
||||||
**FreePEP** 是一款专为[人民教育出版社中小学电子教材平台](https://jc.pep.com.cn/)开发的自动化教材解析、批量抓取与高清 PDF 合成工具。
|
**FreePEP** 是一款专为[人民教育出版社中小学电子教材平台](https://jc.pep.com.cn/)开发的自动化教材解析、批量抓取与高清 PDF 合成工具。
|
||||||
|
|
||||||
提供**WebUI 界面**与**交互式命令行**,内置全量 780+ 本教材目录(数据截止到2026年08月31日)自动解密引擎与阿里云 WAF 滑块验证码自动破解机制,支持一键下载指定学段、学科、年级的全套教材并自动生成高清 PDF 文件。
|
提供**WebUI 界面**与**交互式命令行**,内置全量 780+ 本教材目录(数据截止到2026年08月31日)自动解密引擎与阿里云 WAF 滑块验证码自动破解机制,支持一键下载指定学段、学科、年级的全套教材并自动生成高清 PDF 文件。
|
||||||
|
|
||||||
**更新内容:**
|
|
||||||
|
|
||||||
2026.09.04 FreePEP v1.1 命令行加入了批量下载功能,详情见**启动办法三**
|
|
||||||
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## ✨ 核心特性
|
## ✨ 核心特性
|
||||||
@@ -26,26 +20,18 @@
|
|||||||
## 📸 界面预览
|
## 📸 界面预览
|
||||||
|
|
||||||
### WebUI 网页端
|
### WebUI 网页端
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### CLI 网页端
|
### CLI 网页端
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
||||||
# 🚀 使用方式
|
# 🚀 使用方式
|
||||||
|
|
||||||
## 🖥️ 方式一:(推荐,适合小白)
|
## 🖥️ 方式一:(推荐,适合小白)
|
||||||
|
|
||||||
直接下载发行包,解压缩后运行FreePEP.exe,在弹出的Web页面里面自行操作下载。
|
直接下载发行包,解压缩后运行FreePEP.exe,在弹出的Web页面里面自行操作下载。
|
||||||
|
|
||||||
## 方式二:从源码启动
|
## 方式二:从源码启动
|
||||||
|
|
||||||
### 克隆仓库与安装依赖
|
### 克隆仓库与安装依赖
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 克隆仓库
|
# 克隆仓库
|
||||||
git clone https://github.com/siknet/FreePEP.git
|
git clone https://github.com/siknet/FreePEP.git
|
||||||
@@ -57,32 +43,24 @@ pip install -r requirements.txt
|
|||||||
# 安装 Playwright 所需的 Chromium 浏览器内核
|
# 安装 Playwright 所需的 Chromium 浏览器内核
|
||||||
playwright install chromium
|
playwright install chromium
|
||||||
```
|
```
|
||||||
|
|
||||||
### 启动办法一:Webui
|
### 启动办法一:Webui
|
||||||
|
|
||||||
在终端中执行以下命令,系统将自动启动本地服务并在默认浏览器中打开管理页面:
|
在终端中执行以下命令,系统将自动启动本地服务并在默认浏览器中打开管理页面:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python webui.py
|
python webui.py
|
||||||
```
|
```
|
||||||
|
* **访问地址**:`http://127.0.0.1:8000`
|
||||||
- **访问地址**:`http://127.0.0.1:8000`
|
* **默认下载目录**:项目根目录下的 `./downloads` 文件夹(可在 Web 界面点击「📁 打开保存目录」直达)。
|
||||||
- **默认下载目录**:项目根目录下的 `./downloads` 文件夹(可在 Web 界面点击「📁 打开保存目录」直达)。
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### 启动办法二:使用 CLI 命令行
|
### 启动办法二:使用 CLI 命令行
|
||||||
|
|
||||||
#### 1. 交互式菜单模式
|
#### 1. 交互式菜单模式
|
||||||
|
|
||||||
直接运行 `cli.py`,根据控制台提示逐步选择学段、学科与年级:
|
直接运行 `cli.py`,根据控制台提示逐步选择学段、学科与年级:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python cli.py
|
python cli.py
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 2. 参数直达模式(适合自动化与脚本调用)
|
#### 2. 参数直达模式(适合自动化与脚本调用)
|
||||||
|
|
||||||
通过命令行参数直接指定条件过滤并自动开始下载:
|
通过命令行参数直接指定条件过滤并自动开始下载:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -106,7 +84,6 @@ python cli.py --xd "小学(六三学制)" --xk "语文" --nj "一年级" -o
|
|||||||
```
|
```
|
||||||
|
|
||||||
**参数说明**:
|
**参数说明**:
|
||||||
|
|
||||||
| 参数 | 说明 | 示例 |
|
| 参数 | 说明 | 示例 |
|
||||||
| :--- | :--- | :--- |
|
| :--- | :--- | :--- |
|
||||||
| `--xd` | 指定学段 | `小学(六三学制)`、`初中(六三学制)`、`小学(五四学制)`、`初中(五·四学制)`、`高中`、`培智学校`、`聋校`、`盲校(盲文版)`、`盲校(低视力版)` |
|
| `--xd` | 指定学段 | `小学(六三学制)`、`初中(六三学制)`、`小学(五四学制)`、`初中(五·四学制)`、`高中`、`培智学校`、`聋校`、`盲校(盲文版)`、`盲校(低视力版)` |
|
||||||
@@ -140,13 +117,12 @@ python download_all.py --nj "一年级"
|
|||||||
```
|
```
|
||||||
|
|
||||||
**功能特性**:
|
**功能特性**:
|
||||||
|
* 🚀 **多线程并发提速**:默认 **3 线程**并发同时下载,支持通过 `-w / --workers` 自定义并发线程数(如 5~10 线程),下载效率大幅提升。
|
||||||
- 🚀 **多线程并发提速**:默认 **3 线程**并发同时下载,支持通过 `-w / --workers` 自定义并发线程数(如 5~10 线程),下载效率大幅提升。
|
* 🎯 **支持多学段组合**:`--xd` 支持传入多个学段(逗号分隔),精准下载普通义务教育或高中学段,自动跳过特教教材。
|
||||||
- 🎯 **支持多学段组合**:`--xd` 支持传入多个学段(逗号分隔),精准下载普通义务教育或高中学段,自动跳过特教教材。
|
* 🌲 **两层层级目录**:自动分类保存为 `downloads/<学段>/<年级>/<教材名>.pdf`,告别成百上千文件堆在单目录。
|
||||||
- 🌲 **两层层级目录**:自动分类保存为 `downloads/<学段>/<年级>/<教材名>.pdf`,告别成百上千文件堆在单目录。
|
* ⚡ **智能断点续传**:已完整下载的教材**自动秒跳过**,中途随时中断无缝继续,绝不重复下载。
|
||||||
- ⚡ **智能断点续传**:已完整下载的教材**自动秒跳过**,中途随时中断无缝继续,绝不重复下载。
|
* 🧹 **切片自动清理**:每本教材合成 PDF 后自动清理临时图片分片,极大保护硬盘空间。
|
||||||
- 🧹 **切片自动清理**:每本教材合成 PDF 后自动清理临时图片分片,极大保护硬盘空间。
|
* 💬 **清爽紧凑输出**:不打印繁琐单页过程,仅在教材下载合并完成或跳过时输出进度与提示。
|
||||||
- 💬 **清爽紧凑输出**:不打印繁琐单页过程,仅在教材下载合并完成或跳过时输出进度与提示。
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -159,7 +135,6 @@ python build_exe.py
|
|||||||
```
|
```
|
||||||
|
|
||||||
### 打包脚本会自动完成以下操作:
|
### 打包脚本会自动完成以下操作:
|
||||||
|
|
||||||
1. 自动检查并安装 `PyInstaller` 编译工具。
|
1. 自动检查并安装 `PyInstaller` 编译工具。
|
||||||
2. 将 WebUI 及所有 Python 依赖打包为独立可执行文件 `FreePEP.exe`。
|
2. 将 WebUI 及所有 Python 依赖打包为独立可执行文件 `FreePEP.exe`。
|
||||||
3. **自动提取并内嵌绿色便携版 Chromium 浏览器内核**至 `browsers/` 目录。
|
3. **自动提取并内嵌绿色便携版 Chromium 浏览器内核**至 `browsers/` 目录。
|
||||||
|
|||||||
+9
-7
@@ -556,19 +556,21 @@ class PepDownloader:
|
|||||||
download_success = True
|
download_success = True
|
||||||
break
|
break
|
||||||
|
|
||||||
# 触发 WAF 验证码或网络抖动拦截
|
# 触发 WAF 验证码、CDN 频控或网络抖动
|
||||||
warn_msg = f" [!] 《{safe_title}》第 {page_num} 页触发验证码/拦截 (重试 {retry + 1}/4),自动重新过盾..."
|
retry_wait = 2.5 * (retry + 1) + random.uniform(0.5, 1.5)
|
||||||
|
warn_msg = f" [!] 《{safe_title}》第 {page_num} 页触发验证码/拦截 (重试 {retry + 1}/4,等待 {retry_wait:.1f}s 后重新过盾)..."
|
||||||
if log_cb: log_cb(warn_msg)
|
if log_cb: log_cb(warn_msg)
|
||||||
else: print(warn_msg)
|
else: print(warn_msg)
|
||||||
|
|
||||||
# 重新刷新/导航并破解滑块
|
# 错峰退避与重新过盾
|
||||||
|
time.sleep(retry_wait)
|
||||||
try:
|
try:
|
||||||
page.goto(book_url, referer="https://jc.pep.com.cn/", wait_until="load")
|
page.goto(book_url, referer="https://jc.pep.com.cn/", wait_until="load", timeout=20000)
|
||||||
time.sleep(2)
|
time.sleep(1.5)
|
||||||
self._solve_slider(page, log_cb)
|
self._solve_slider(page, log_cb)
|
||||||
time.sleep(2.5)
|
time.sleep(1.5)
|
||||||
except Exception:
|
except Exception:
|
||||||
time.sleep(3)
|
time.sleep(2)
|
||||||
|
|
||||||
if not download_success:
|
if not download_success:
|
||||||
fail_msg = f" -> 《{safe_title}》[{page_num}/{total_pages}] 下载失败!"
|
fail_msg = f" -> 《{safe_title}》[{page_num}/{total_pages}] 下载失败!"
|
||||||
|
|||||||
Reference in New Issue
Block a user