mirror of
https://github.com/violettoolssite/CFspider.git
synced 2026-04-05 11:29:03 +08:00
Add mirror feature v1.6.0
This commit is contained in:
5
.gitignore
vendored
5
.gitignore
vendored
@@ -17,3 +17,8 @@ edgetunnel_proxy.py
|
||||
test.py
|
||||
test_*.py
|
||||
*.html
|
||||
|
||||
# 镜像输出目录
|
||||
mirror/
|
||||
*_mirror/
|
||||
test_mirror_*/
|
||||
|
||||
111
README.md
111
README.md
@@ -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、自动化操作等。
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
// 支持:同步/异步请求、TLS指纹模拟、浏览器自动化
|
||||
|
||||
let 反代IP = '';
|
||||
const VERSION = '1.5.1';
|
||||
const VERSION = '1.6.0';
|
||||
const START_TIME = Date.now();
|
||||
|
||||
export default {
|
||||
|
||||
Reference in New Issue
Block a user