11 KiB
11 KiB
Go Site Clone
📖 项目简介
Go Site Clone 是一款强大的网站克隆工具,能够完整抓取网站的所有资源(HTML、CSS、JavaScript、图片、视频等),并支持本地部署。采用真实浏览器引擎进行资源抓取,配备完善的反检测机制和浏览器指纹伪装系统。
✨ 核心亮点
- 🚀 真实浏览器引擎 - 基于 Chrome DevTools Protocol,模拟真实用户行为
- 🎭 指纹伪装系统 - Canvas 指纹、时区、语言、UserAgent 全方位伪装
- 🔄 智能资源管理 - 自动去重、同域过滤、分类存储
- 📦 完整站点克隆 - 支持静态资源、动态内容的完整抓取
- 🖥️ 跨平台支持 - Windows、macOS、Linux 一键打包
- 💫 现代化界面 - Nuxt.js + Ant Design Vue 响应式 UI
- 🌐 本地站点服务 - 集成 Nginx,一键启动本地镜像站点
🎯 功能特性
资源抓取
- ✅ HTML 页面完整克隆
- ✅ CSS 样式表批量下载
- ✅ JavaScript 脚本文件抓取
- ✅ 图片资源(JPG、PNG、GIF、SVG、WebP)
- ✅ 视频文件(MP4、WebM 等)
- ✅ 字体文件和其他静态资源
- ✅ 智能链接遍历(站内链接自动跟踪)
反检测技术
- 🎭 Canvas 指纹随机化
- 🌍 时区模拟(支持全球时区)
- 🗣️ 语言和地域伪装
- 🔐 UserAgent 定制
- 📍 地理位置坐标伪装
- 🕵️ Stealth 插件集成(绕过反爬虫检测)
文件管理
- 📁 按域名自动分类存储
- 🔍 资源类型分类管理
- 📊 下载进度实时显示
- 🗂️ 本地站点列表查看
- 📂 一键打开文件夹
本地部署
- 🌐 集成 Nginx 服务器
- ⚡ 快速启动本地镜像站点
- 🔧 自定义端口配置
- 📝 站点配置管理
🚀 快速开始
环境要求
- Go 1.24 或更高版本
- Node.js 18+ 和 npm/pnpm
- Wails CLI v3
安装依赖
1. 安装 Wails CLI
go install github.com/wailsapp/wails/v3/cmd/wails3@latest
2. 克隆项目
git clone https://github.com/zhuy1228/go-site-clone.git
cd go-site-clone
3. 安装 Go 依赖
go mod download
4. 安装前端依赖
cd frontend
npm install
# 或使用 pnpm
pnpm install
开发模式
# 启动开发服务器(支持热重载)
wails3 dev
应用将在开发模式下启动,前后端修改会自动重载。
生产构建
# 构建生产版本
wails3 build
# 构建产物位于 build/ 目录
📚 使用说明
基本使用流程
-
启动应用
wails3 dev # 或运行打包后的可执行文件 -
输入目标网站 URL
- 在界面中输入要克隆的网站地址
- 例如:
https://example.com
-
获取资源列表
- 点击「获取资源」按钮
- 系统自动分析站点并列出所有资源
-
下载站点
- 选择需要下载的资源类型
- 点击「下载」开始克隆
- 实时查看下载进度
-
本地预览
- 从下载列表中选择站点
- 点击「打开文件夹」查看文件
- 或使用集成的 Nginx 服务进行本地部署
配置文件说明
编辑 config.yaml 自定义配置:
# 应用名称
appName: "Go Site Clone"
# 本地服务端口
port: 6997
# WebSocket 连接地址
wsUrl: "106.12.33.188:6996"
# STUN 服务器地址
stunUrl: "stun:106.12.33.188:3478"
# API 服务地址
apiUrl: "http://106.12.33.188:6996"
# 网站文件保存目录
siteFileDir: "www"
API 接口
应用暴露以下方法供前端调用:
GetResources(url string)
获取指定 URL 的所有资源列表
参数:
url: 目标网站地址
返回: ResourcesList 对象,包含分类资源
DownloadSite(uri string, resources ResourcesList)
下载网站资源到本地
参数:
uri: 网站地址resources: 资源列表对象
返回: bool - 下载是否成功
GetDownloadList()
获取已下载的网站列表
返回: []FileDir - 文件目录列表
OpenSiteFileDir(path string)
打开指定网站的文件夹
参数:
path: 相对路径
返回: bool - 操作是否成功
🏗️ 技术架构
技术栈
后端 (Go)
- Wails v3 - 应用框架
- go-rod - 浏览器自动化
- go-rod/stealth - 反检测
- goquery - HTML 解析
- go-sqlite3 - 数据库
- yaml.v3 - 配置管理
前端 (Nuxt.js)
- Nuxt 4 - Vue 框架
- Vue 3 - 响应式框架
- Ant Design Vue - UI 组件库
- Chart.js - 图表库
- Wails Runtime - 前后端通信
项目结构
go-site-clone/
├── app.go # 应用主逻辑
├── main.go # 程序入口
├── config.yaml # 配置文件
├── go.mod # Go 模块依赖
│
├── config/ # 配置加载模块
│ └── index.go
│
├── services/ # 业务服务层
│ ├── site_service.go # 网站克隆核心服务
│ └── nginx_service.go # Nginx 服务管理
│
├── libs/ # 核心库
│ ├── browser.go # 浏览器池管理
│ ├── chrome.go # Chrome 实例创建
│ ├── sqlite.go # 数据库操作
│ ├── pack.go # 打包工具
│ └── browser-fingerprint/ # 浏览器指纹伪装
│ ├── index.go
│ ├── canvas.go # Canvas 指纹
│ └── timezone.go # 时区模拟
│
├── types/ # 类型定义
│ ├── fingerprint_type.go # 指纹参数类型
│ ├── task_type.go # 任务类型
│ └── nginx_template.go # Nginx 模板
│
├── utils/ # 工具函数
│ ├── file.go # 文件下载/管理
│ └── index.go # 环境检查
│
├── frontend/ # Nuxt.js 前端
│ ├── nuxt.config.ts # Nuxt 配置
│ ├── package.json # 前端依赖
│ ├── app/ # 应用代码
│ │ ├── app.vue # 根组件
│ │ ├── components/ # Vue 组件
│ │ ├── pages/ # 页面路由
│ │ ├── layouts/ # 布局模板
│ │ └── plugins/ # 插件
│ └── bindings/ # Go 绑定类型
│
├── user-data/ # 浏览器用户数据
├── www/ # 网站文件存储目录
├── plugin/ # 插件
│ └── nginx/ # Nginx 插件
└── build/ # 构建配置
├── darwin/ # macOS 打包配置
├── linux/ # Linux 打包配置
└── windows/ # Windows 打包配置
核心模块说明
1. 浏览器管理 (libs/browser.go)
- 浏览器实例池化
- 并发安全的读写锁
- 自动创建和销毁
2. 网站克隆服务 (services/site_service.go)
- 资源抓取引擎
- 智能链接遍历
- 资源去重和过滤
3. 指纹伪装 (libs/browser-fingerprint/)
- Canvas 指纹随机化
- 时区和语言模拟
- UserAgent 定制
4. 文件管理 (utils/file.go)
- 文件下载和存储
- 目录结构管理
- 文件列表查询
⚙️ 配置说明
浏览器指纹配置
type BrowserFingerprintParams struct {
Canvas bool // 是否随机化 Canvas 指纹
TimeZone string // 时区,如 "America/New_York"
Language string // 语言,如 "en-US"
UserAgent string // 自定义 UserAgent
GeoLocation string // 地理位置,如 "40.7128,-74.0060"
}
任务参数配置
type TaskParams struct {
URL string // 目标网站 URL
Fingerprint BrowserFingerprintParams // 指纹参数
Proxy string // 代理地址(可选)
}
🔧 开发指南
添加新功能
-
后端服务
- 在
services/目录创建新服务 - 实现业务逻辑
- 在
app.go中暴露方法给前端
- 在
-
前端界面
- 在
frontend/app/pages/添加新页面 - 在
frontend/app/components/添加组件 - 使用 Wails Runtime 调用后端方法
- 在
调试技巧
# 查看详细日志
wails3 dev -v
# 构建时查看详细信息
wails3 build -v
# 清理构建缓存
wails3 build -clean
测试
# 运行 Go 测试
go test ./...
# 运行前端测试(如果配置)
cd frontend
npm test
📦 打包部署
Windows
wails3 build -platform windows/amd64
生成的可执行文件位于 build/bin/
macOS
wails3 build -platform darwin/universal
生成 .app 应用包
Linux
wails3 build -platform linux/amd64
支持生成 .deb、.rpm、AppImage 等格式
🤝 贡献指南
欢迎提交 Issue 和 Pull Request!
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 提交 Pull Request
📄 许可证
本项目采用 MIT 许可证 - 详见 LICENSE 文件
🙏 致谢
- Wails - 出色的 Go + Web 框架
- go-rod - 强大的浏览器自动化工具
- Nuxt.js - 优雅的 Vue 框架
- Ant Design Vue - 精美的 UI 组件库
📞 联系方式
- 作者: zhuy1228
- 项目链接: https://github.com/zhuy1228/go-site-clone
如果这个项目对你有帮助,请给它一个 ⭐️
Made with ❤️ by zhuy1228