# Go Site Clone
![Go Version](https://img.shields.io/badge/Go-1.24+-00ADD8?style=flat&logo=go) ![Wails](https://img.shields.io/badge/Wails-3.0--alpha-DF5B00?style=flat) ![Nuxt](https://img.shields.io/badge/Nuxt-4.1.2-00DC82?style=flat&logo=nuxt.js) ![License](https://img.shields.io/badge/License-MIT-green?style=flat) 基于 Wails3 + Nuxt.js 开发的网站克隆与本地部署工具 [功能特性](#-功能特性) • [快速开始](#-快速开始) • [使用说明](#-使用说明) • [技术架构](#-技术架构) • [配置说明](#-配置说明)
--- ## 📖 项目简介 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 ```bash go install github.com/wailsapp/wails/v3/cmd/wails3@latest ``` #### 2. 克隆项目 ```bash git clone https://github.com/zhuy1228/go-site-clone.git cd go-site-clone ``` #### 3. 安装 Go 依赖 ```bash go mod download ``` #### 4. 安装前端依赖 ```bash cd frontend npm install # 或使用 pnpm pnpm install ``` ### 开发模式 ```bash # 启动开发服务器(支持热重载) wails3 dev ``` 应用将在开发模式下启动,前后端修改会自动重载。 ### 生产构建 ```bash # 构建生产版本 wails3 build # 构建产物位于 build/ 目录 ``` --- ## 📚 使用说明 ### 基本使用流程 1. **启动应用** ```bash wails3 dev # 或运行打包后的可执行文件 ``` 2. **输入目标网站 URL** - 在界面中输入要克隆的网站地址 - 例如:`https://example.com` 3. **获取资源列表** - 点击「获取资源」按钮 - 系统自动分析站点并列出所有资源 4. **下载站点** - 选择需要下载的资源类型 - 点击「下载」开始克隆 - 实时查看下载进度 5. **本地预览** - 从下载列表中选择站点 - 点击「打开文件夹」查看文件 - 或使用集成的 Nginx 服务进行本地部署 ### 配置文件说明 编辑 `config.yaml` 自定义配置: ```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](https://wails.io/) - 应用框架 - [go-rod](https://github.com/go-rod/rod) - 浏览器自动化 - [go-rod/stealth](https://github.com/go-rod/stealth) - 反检测 - [goquery](https://github.com/PuerkitoBio/goquery) - HTML 解析 - [go-sqlite3](https://github.com/mattn/go-sqlite3) - 数据库 - [yaml.v3](https://github.com/go-yaml/yaml) - 配置管理 **前端 (Nuxt.js)** - [Nuxt 4](https://nuxt.com/) - Vue 框架 - [Vue 3](https://vuejs.org/) - 响应式框架 - [Ant Design Vue](https://antdv.com/) - UI 组件库 - [Chart.js](https://www.chartjs.org/) - 图表库 - [Wails Runtime](https://wails.io/) - 前后端通信 ### 项目结构 ``` 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`) - 文件下载和存储 - 目录结构管理 - 文件列表查询 --- ## ⚙️ 配置说明 ### 浏览器指纹配置 ```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" } ``` ### 任务参数配置 ```go type TaskParams struct { URL string // 目标网站 URL Fingerprint BrowserFingerprintParams // 指纹参数 Proxy string // 代理地址(可选) } ``` --- ## 🔧 开发指南 ### 添加新功能 1. **后端服务** - 在 `services/` 目录创建新服务 - 实现业务逻辑 - 在 `app.go` 中暴露方法给前端 2. **前端界面** - 在 `frontend/app/pages/` 添加新页面 - 在 `frontend/app/components/` 添加组件 - 使用 Wails Runtime 调用后端方法 ### 调试技巧 ```bash # 查看详细日志 wails3 dev -v # 构建时查看详细信息 wails3 build -v # 清理构建缓存 wails3 build -clean ``` ### 测试 ```bash # 运行 Go 测试 go test ./... # 运行前端测试(如果配置) cd frontend npm test ``` --- ## 📦 打包部署 ### Windows ```bash wails3 build -platform windows/amd64 ``` 生成的可执行文件位于 `build/bin/` ### macOS ```bash wails3 build -platform darwin/universal ``` 生成 `.app` 应用包 ### Linux ```bash wails3 build -platform linux/amd64 ``` 支持生成 `.deb`、`.rpm`、AppImage 等格式 --- ## 🤝 贡献指南 欢迎提交 Issue 和 Pull Request! 1. Fork 本仓库 2. 创建特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 提交 Pull Request --- ## 📄 许可证 本项目采用 MIT 许可证 - 详见 [LICENSE](LICENSE) 文件 --- ## 🙏 致谢 - [Wails](https://wails.io/) - 出色的 Go + Web 框架 - [go-rod](https://go-rod.github.io/) - 强大的浏览器自动化工具 - [Nuxt.js](https://nuxt.com/) - 优雅的 Vue 框架 - [Ant Design Vue](https://antdv.com/) - 精美的 UI 组件库 --- ## 📞 联系方式 - 作者: zhuy1228 - 项目链接: [https://github.com/zhuy1228/go-site-clone](https://github.com/zhuy1228/go-site-clone) ---
**如果这个项目对你有帮助,请给它一个 ⭐️** Made with ❤️ by zhuy1228