hardikpatel29/DarkLens

GitHub: hardikpatel29/DarkLens

DarkLens 是一个自动化检测网站暗黑模式的可解释框架,融合 DOM 规则、NLP 分类和计算机视觉来标记操纵性设计并提供可验证证据。

Stars: 0 | Forks: 0

# DarkLens DarkLens 是一个用于自动化检测和报告网站 dark patterns 的框架。它结合使用 DOM 规则检查、NLP 分类和计算机视觉来分析网页,以清晰且可验证的证据标记具有操纵性的设计模式。 每项发现都包含了触发它的确切 DOM 元素、规则匹配、模型预测或视觉边界框。 ## 当前状态 核心 pipeline、规则引擎、融合系统、API、CLI 和报告工具已完全构建并测试完毕。机器学习模型(NLP 和 CV)已集成到架构中,如果不存在训练好的权重,则提供降级支持。 | 组件 | 技术栈 / 方法 | 状态 | |---|---| | **核心架构** | Clean Architecture, Dependency Injection | ✅ 完成 | | **页面捕获** | Playwright (Headless Chromium) | ✅ 完成 | | **规则引擎** | 确定性 DOM 和 CSS 检查(4 条规则) | ✅ 完成 | | **NLP 分类器** | DistilBERT(在 Mathur/Yamana 数据集上微调) | ✅ 完成(F1 Macro: 97.8%, Precision: 97.7%) | | **CV 检测器** | YOLOv8 + EasyOCR(视觉 UI 元素) | 🟡 代码已完成(数据集标注待定) | | **证据融合** | 概率 Noisy-OR + 规则下限 | ✅ 完成 | | **报告与导出** | JSON, HTML, CSV, PDF(Playwright PDF 渲染) | ✅ 完成 | | **CLI 和 API** | FastAPI, argparse, Docker | ✅ 完成 | 如果 `models/` 中不存在训练好的模型权重,系统会优雅地禁用这些检测器,并使用规则引擎运行,而不会崩溃: ``` python -c "from darklens.container import build_detectors; print([d.name for d in build_detectors()])" # Output: ['rule_engine'] ``` ## 项目结构 代码库严格遵守 Clean Architecture 原则: ``` src/darklens/ ├── domain/ # Core business logic, entities, & rule interfaces (zero external ML dependencies) ├── application/ # Orchestration, use cases, ports, & evidence fusion engine ├── infrastructure/ # Concrete implementations (Playwright, PyTorch, YOLO, EasyOCR, Reports) ├── interfaces/ # FastAPI web service & CLI entry points └── container.py # Composition root for dependency injection ``` 第三方依赖(Playwright、PyTorch、Ultralytics、EasyOCR)被严格隔离在 ports 之后,因此 domain 和 application 层保持整洁,并且无需安装繁重的依赖即可进行测试。 ## 快速开始 ### 前置条件 * Python 3.10+ * Playwright 和 Chromium 浏览器二进制文件 ### 设置 ``` # Clone 仓库 git clone https://github.com/hardikpatel29/DarkLens.git cd DarkLens # 创建虚拟环境并安装依赖 python -m venv .venv source .venv/bin/activate # On Windows: .venv\Scripts\activate pip install -e ".[dev]" # 安装 Playwright 浏览器 playwright install chromium ``` ## 快速入门 ### 1. 通过 CLI 运行 扫描网站并生成 JSON、HTML、CSV 或 PDF 格式的报告: ``` python -m darklens.interfaces.cli.main https://example.com --formats json,html,csv,pdf ``` 报告将保存到 `data/reports/`。 ### 2. 运行 API 服务器 启动 FastAPI 服务器以访问 REST endpoints 和交互式 Swagger UI: ``` uvicorn darklens.interfaces.api.main:app --reload ``` 可通过 `http://localhost:8000` 访问的 Endpoints: * `POST /api/v1/scan` — 返回原始 JSON `ScanResult` * `POST /api/v1/scan/report` — 渲染 HTML 报告 * `POST /api/v1/scan/report.pdf` — 下载 PDF 报告 ### 3. 使用 Docker 运行 在容器中启动整个应用程序: ``` docker compose up --build ``` ## 测试与验证 运行单元测试(不需要浏览器或庞大的机器学习库): ``` pytest tests/unit ``` 运行集成测试(启动 headless Chromium 对本地 HTML fixtures 进行测试): ``` pytest tests/integration ``` 运行实时性能基准测试(测量扫描延迟、CPU 时间和 RAM 使用量): ``` python scripts/benchmark.py https://example.com ``` ## 模型训练与微调 `scripts/` 中提供了用于数据集准备和微调的脚本: ``` # 训练 NLP Classifier python scripts/train_nlp_classifier.py \ --train-csv data/nlp/train.csv \ --val-csv data/nlp/val.csv \ --output-dir models/nlp_classifier # 训练 CV Detector python scripts/train_cv_detector.py \ --data data/cv/data.yaml \ --output-dir models/cv_detector ``` ## 数据集引用 * **NLP 数据集:** 微调使用了来自 Mathur 等人的 dark pattern 语料库,*"Dark Patterns at Scale: Findings from a Crawl of 11K Shopping Websites"* (2019),以及 Yamana Lab (`yamanalab/ec-darkpattern`, IEEE BigData 2022)。 * **CV 截图:** 使用自定义 Playwright 脚本在电子商务和旅游网站上收集,用于视觉模式标注。
标签:AV绕过, FastAPI, Playwright, Web分析, 云计算, 凭据扫描, 深色模式检测, 特征检测, 网络测绘, 规则引擎, 计算机视觉, 请求拦截, 逆向工具