Add mirror feature v1.6.0

This commit is contained in:
test01
2026-01-04 17:35:59 +08:00
parent 55a91d8e84
commit 8f24557296
3 changed files with 117 additions and 1 deletions

5
.gitignore vendored
View File

@@ -17,3 +17,8 @@ edgetunnel_proxy.py
test.py
test_*.py
*.html
# 镜像输出目录
mirror/
*_mirror/
test_mirror_*/

111
README.md
View File

@@ -116,6 +116,7 @@ Cloudflare Workers 免费版每日 100,000 请求,无需信用卡,无需付
- **支持流式响应**高效处理大文件下载
- **支持 TLS 指纹模拟**基于 curl_cffi可模拟 Chrome/Safari/Firefox/Edge 浏览器指纹
- **支持 IP 地图可视化**基于 MapLibre GL生成 HTML 地图文件显示代理 IP 地理位置
- **支持网页镜像**基于 Playwright + BeautifulSoup一键保存完整网页到本地自动下载所有资源
- 完全免费Workers 免费版每日 100,000 请求
## 测试结果
@@ -131,6 +132,7 @@ Cloudflare Workers 免费版每日 100,000 请求,无需信用卡,无需付
| 浏览器(VLESS) | OK | Cloudflare IP 出口 |
| 浏览器(无代理) | OK | 本地 IP 出口 |
| IP 地图可视化 | OK | 生成 HTML 地图文件 |
| 网页镜像 | OK | 保存完整网页到本地 |
## 部署 Workers
@@ -714,6 +716,115 @@ print(f"东京: {nrt['city']}, {nrt['country']} ({nrt['lat']}, {nrt['lng']})")
- **节点列表**:显示所有使用的 Cloudflare 节点代码
- **自动缩放**:地图自动缩放到数据范围
## 网页镜像
CFspider 支持将网页完整镜像到本地,包括 HTML、CSS、JavaScript、图片、字体等所有资源并自动重写链接实现离线浏览。
### 基本用法
```python
import cfspider
# 镜像网页到本地,自动打开浏览器预览
result = cfspider.mirror("https://httpbin.org", open_browser=True)
print(f"保存位置: {result.index_file}")
print(f"资源目录: {result.assets_dir}")
print(f"总文件数: {result.total_files}")
print(f"总大小: {result.total_size / 1024:.2f} KB")
```
### 指定保存目录
```python
import cfspider
# 指定保存目录,不自动打开浏览器
result = cfspider.mirror(
"https://example.com",
save_dir="./my_mirror",
open_browser=False
)
```
### 配合代理使用
```python
import cfspider
# 使用 VLESS 代理镜像网页
result = cfspider.mirror(
"https://httpbin.org",
save_dir="./mirror_output",
cf_proxies="vless://uuid@v2.example.com:443?path=/",
open_browser=True
)
```
### 高级选项
```python
import cfspider
result = cfspider.mirror(
"https://example.com",
save_dir="./output",
open_browser=True,
timeout=60, # 请求超时时间(秒)
max_workers=10 # 并发下载线程数
)
```
### 目录结构
镜像完成后的目录结构如下:
```
save_dir/
├── index.html # 主页面(链接已重写为相对路径)
└── assets/
├── css/
│ └── style.css
├── js/
│ └── main.js
├── images/
│ ├── logo.png
│ └── banner.jpg
├── fonts/
│ └── roboto.woff2
└── other/
└── favicon.ico
```
### MirrorResult 对象
| 属性 | 类型 | 说明 |
|------|------|------|
| index_file | str | 主 HTML 文件路径 |
| assets_dir | str | 资源目录路径 |
| total_files | int | 下载的文件总数 |
| total_size | int | 总大小(字节) |
| failed_urls | list | 下载失败的 URL 列表 |
| success | bool | 是否成功 |
### 镜像 API 参考
| 方法 | 说明 |
|------|------|
| `cfspider.mirror(url, **kwargs)` | 镜像网页到本地 |
| `cfspider.MirrorResult` | 镜像结果类 |
| `cfspider.WebMirror(**kwargs)` | 镜像器类 |
### 镜像功能特性
- **完整资源保存**:自动下载 CSS、JS、图片、字体等所有资源
- **CSS 资源解析**:自动解析 CSS 中的 `url()` 引用(背景图、字体等)
- **链接重写**:将绝对 URL 自动转换为相对路径
- **并发下载**:多线程并发下载资源,提高效率
- **代理支持**:支持 VLESS、HTTP、SOCKS5 代理
- **浏览器渲染**:使用 Playwright 渲染 JavaScript 动态页面
- **自动预览**:下载完成后自动打开浏览器预览
## 浏览器模式
CFspider 支持浏览器模式,可以渲染 JavaScript 动态页面、截图、生成 PDF、自动化操作等。

View File

@@ -2,7 +2,7 @@
// 支持:同步/异步请求、TLS指纹模拟、浏览器自动化
let 反代IP = '';
const VERSION = '1.5.1';
const VERSION = '1.6.0';
const START_TIME = Date.now();
export default {