OstinUA/Site-Analyzer
GitHub: OstinUA/Site-Analyzer
一个基于 Chrome MV3 的纯客户端网站审计工具,解决批量 URL 健康度与 CMS 识别的效率与隐私问题。
Stars: 0 | Forks: 0
# 站点分析器
一个高信号、基于浏览器的网站审计工具包,能够在单次扫描中对 URL 健康度、内容成熟度以及可能的平台/CMS 进行分类。
[](https://chromewebstore.google.com/search/OstinUA)
[](https://ostinua.github.io/Chrome-Web-Store_Developer-List/)
[](manifest.json)
[](manifest.json)
[](LICENSE)
[](src/app.js)
## 目录
- [标题与描述](#site-analyzer)
- [目录](#table-of-contents)
- [功能特性](#features)
- [技术栈与架构](#tech-stack--architecture)
- [快速开始](#getting-started)
- [测试](#testing)
- [部署](#deployment)
- [使用说明](#usage)
- [配置](#configuration)
- [许可证](#license)
- [联系与社区支持](#contacts--community-support)
## 功能特性
- 通过多行输入(每行一个 URL)进行批量 URL 扫描,并带有防重复归一化处理。
- 并发感知执行队列,可在批量分析时控制浏览器端压力,实现快速分析。
- 请求超时处理,对缓慢或无法访问的主机提供确定的错误判定。
- HTTP/错误感知:
- 明确处理 `401`、`403`、`404` 和 `5xx` 类别。
- 显示重定向(`response.url`)检测结果。
- 多信号网站分类引擎:
- 通过标题、正文、规范链接及已知域名启发式检测停放/待售域名。
- 检测未完成页面与屏蔽页面的模式。
- 内容质量评分,区分全站与着陆页。
- CMS/框架指纹识别支持(例如 WordPress、Shopify、Wix、React、Vue、Angular、Magento、Bitrix 等)。
- 内容与结构指标:
- 内部链接
- 导航链接
- 单词计数
- 图像数量
- 复杂度评分(`scripts + styles + forms`)
- 可交互的数据表格,支持对指标列进行排序。
- 基于 URL/标题和状态严重程度的客户端全文过滤。
- 支持 CSV 导出,便于分析师交接/报告流程。
- 主题持久化(`light`/`dark`),通过 `localStorage` 实现。
- 通过行双击重新检查工作流程,快速刷新单个站点结果。
## 技术栈与架构
### 核心栈
- 语言:`JavaScript (ES Modules)`
- 运行时:`Chrome Extension Manifest V3`
- UI:`HTML + CSS + Vanilla JS`
- 浏览器 API:`chrome.action`、`chrome.windows.create`、`fetch`、`DOMParser`
- 打包:静态扩展资源(`manifest.json`、弹出页、服务工作线程)
### 项目结构
### 关键设计决策
- **模块边界明确**:URL 归一化、分析、常量、DOM 渲染被拆分为独立的模块。
- **启发式优先分类**:信号被加权组合,而非依赖脆弱的单模式检测。
- **纯客户端执行模型**:保持部署简单,避免后端运行成本。
- **渐进式渲染**:每个完成的 URL 会立即更新表格,提升分析师反馈速度。
## 快速开始
### 前置条件
- `Google Chrome`(或支持 MV3 扩展的 Chromium 浏览器)
- 本地文件系统访问权限,用于加载未打包的扩展
- 可选:`Node.js >= 18`,用于本地静态检查(语法/ lint 工作流)
### 安装
1. 克隆仓库:
git clone https://github.com//Site-Analyzer.git
cd Site-Analyzer
2. 打开 Chrome 扩展管理页面:
- 访问 `chrome://extensions/`
- 启用 `开发者模式`
3. 加载扩展:
- 点击 `加载已解压的扩展程序`
- 选择项目根目录
4. 启动分析器:
- 点击工具栏中的扩展图标
- 扩展将在弹出窗口中打开 `popup.html`
## 测试
当前仓库未包含专用的自动化测试框架。建议的本地质量门禁:
- JavaScript 语法检查:
node --check background.js
node --check popup.js
node --check src/constants.js
node --check src/url-utils.js
node --check src/dom-utils.js
node --check src/analyzer.js
node --check src/app.js
- 在 Chrome 中进行手动功能验证:
1. 加载未打包扩展
2. 粘贴混合的可达/不可达 URL 列表
3. 验证判定分布、进度更新、排序/过滤、CSV 导出和行重新检查
## 部署
### 生产环境分发(Chrome 扩展)
- 在 `manifest.json` 中递增版本号
- 将扩展源码打包为 zip 归档(排除本地编辑器/系统文件)
- 通过 Chrome Web Store 开发者控制台上传(或作为未打包/企业策略扩展分发)
### CI/CD 集成指南
- 添加语法检查阶段(`node --check ...`)
- 添加静态代码 lint(如 ESLint)以强制代码规范
- 添加打包步骤(`zip`)并与标签发布关联
- 通过清单版本策略和可选的变更日志检查来管控发布
## 使用说明
### 基础用法
```
1) Open the extension popup window.
2) Paste URLs, one per line.
3) Click "Start Scan".
4) Watch progressive table updates.
5) Filter/sort results and export CSV.
```
```
// Example URL input (one per line)
example.com
https://shop.example.org
https://expired-or-empty-domain.tld
```
### 结果语义
- `success`:很可能完整的网站(✓ 全站,✓ 电商,✓ 博客/媒体)
- `warning`:很可能部分/极简站点(~ 着陆页,~ 极简,站点建设中)
- `danger`:停放/空内容/损坏状态
- `error`:访问/网络/超时/系统错误
## 配置
运行时默认值保存在 `src/constants.js` 中,并由应用/分析模块使用。
- `concurrencyLimit`:最大并行 URL 工作线程数
- `timeoutMs`:请求超时时间(由中止控制器使用)
- `title`:结果表格中标题渲染的最大长度
- `themeStorageKey`:UI 主题切换逻辑使用的 localStorage 键名
## 许可证
本项目根据 `MIT License` 许可。请参阅 [`LICENSE`](LICENSE) 获取完整文本。
## 联系与社区支持
## 支持该项目
[](https://www.patreon.com/OstinFCT)
[](https://ko-fi.com/fctostin)
[](https://boosty.to/ostinfct)
[](https://www.youtube.com/@FCT-Ostin)
[](https://t.me/FCTostin)
如果您发现此工具实用,请考虑在 GitHub 上给予星标或直接支持作者。
展开仓库树
``` Site-Analyzer/ ├── background.js ├── LICENSE ├── manifest.json ├── popup.html ├── popup.js ├── styles/ │ └── popup.css ├── icons/ │ └── icon128.png └── src/ ├── analyzer.js ├── app.js ├── constants.js ├── dom-utils.js └── url-utils.js ```架构与扫描流程(Mermaid)
``` flowchart TD A[User enters URLs] --> B[normalizeInputUrls] B --> C[Deduplicate + validate HTTP/HTTPS] C --> D[Queue urls with concurrencyLimit] D --> E[analyzeSingleUrl] E --> F[fetch + timeout + redirect tracking] F --> G[DOMParser parse HTML] G --> H[detectSiteType heuristic engine] H --> I[Scoring + status + verdict + cms] I --> J[renderResultRow] J --> K[Stats + filter + sort + CSV export] ```常见问题与替代本地工作流
### 常见问题 - **扩展无法打开弹出窗口** - 重新加载 `chrome://extensions` 中的扩展 - 检查 `background.js` 是否存在且有效 - **部分 URL 持续因 CORS/不可用而失败** - 由于浏览器限制或反机器人策略,某些主机会出现此情况 - **扫描后无结果** - 验证 URL 是否有效,并确保包含可解析的主机名 - 无效行会被归一化流程跳过 ### 替代验证检查 在加载未打包扩展前,使用轻量级语法验证: ``` node --check background.js node --check popup.js node --check src/constants.js node --check src/url-utils.js node --check src/dom-utils.js node --check src/analyzer.js node --check src/app.js ```示例打包命令
``` # 从存储库根目录开始 zip -r site-analyzer.zip manifest.json background.js popup.html popup.js styles src icons LICENSE README.md ```高级用法:分类策略、自定义工作流与边界情况
### 高级分类策略 - 按 `Score` 降序排序,优先检查高置信度生产站点 - 过滤到 `danger` 和 `error` 以进行修复流程 - 联合查看 `HTTP`、`Time` 和 `Verdict`,以区分传输失败与内容质量问题 ### 下游系统的自定义格式化流程 如果下游流水线期望规范的类别标签,可将 CSV 导出通过后处理脚本转换: ``` // pseudo-map for BI ingestion const statusMap = { success: 'ACTIVE', warning: 'PARTIAL', danger: 'INACTIVE', error: 'UNREACHABLE' }; ``` ### 边界情况 - 大量 SPA 站点可能在初始阶段产生较弱的语义信号(若内容依赖客户端 hydration) - 某些页面会主动阻止类似抓取的请求签名,并显示为 `Blocked / 403` 或网络错误 - CMS 检测基于标记,可能遗漏重度定制的部署配置参考表与默认值
| 键 | 类型 | 默认值 | 描述 | |---|---|---:|---| | `concurrencyLimit` | `number` | `5` | 限制飞行中的扫描工作线程数 | | `timeoutMs` | `number` | `15000` | 每个 URL 请求的超时阈值(毫秒) | | `titleMaxLength` | `number` | `40` | 结果表格中标题渲染的截断阈值 | | `themeStorageKey` | `string` | `siteAnalyzerTheme` | UI 主题切换逻辑使用的存储键 | ### 示例常量对象 ``` export const DEFAULTS = { concurrencyLimit: 5, timeoutMs: 15000, titleMaxLength: 40, themeStorageKey: 'siteAnalyzerTheme' }; ``` ### 环境变量 该项目目前不需要 `.env` 变量,也没有任何 CLI 启动参数。标签:CMS指纹识别, HTTP状态码处理, Manifest V3, SEO工具, Shopify检测, WordPress检测, 关键词优化, 内容质量评估, 前端分析工具, 域名健康检查, 多模态安全, 多线程队列, 客户端分析, 批量URL扫描, 技术栈JavaScript, 数据可视化, 浏览器扩展, 网站审计, 自定义脚本, 请求超时处理, 重定向检测