nprasann/legacy-accessibility-static-crawler

GitHub: nprasann/legacy-accessibility-static-crawler

这是一个离线优先的.NET 8静态无障碍爬虫,用于自动化收集WCAG、Section 508和ADA合规证据。

Stars: 1 | Forks: 0

# 遗留辅助功能静态爬虫 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/618b5b740b215519.svg)](https://github.com/nprasann/legacy-accessibility-static-crawler/actions/workflows/ci.yml) [![GitHub Release](https://img.shields.io/github/v/release/nprasann/legacy-accessibility-static-crawler?display_name=tag)](https://github.com/nprasann/legacy-accessibility-static-crawler/releases) [![License](https://img.shields.io/github/license/nprasann/legacy-accessibility-static-crawler)](LICENSE) 面向生产环境的 .NET 8 / C# 静态无障碍评估爬虫,适用于现代和传统网站,包括针对可能需要 Microsoft Edge IE 模式的系统的辅助工作流。 核心系统无需 LLM、OpenAI、Azure OpenAI、Foundry 或任何云 AI 服务即可工作。未来可选的 LLM 支持仅通过一个已禁用的 `ILlmReviewService` 接口表示。 有关为非技术用户编写的分步说明,包括身份验证爬取和 Azure DevOps CSV 导出,请参阅 [docs/non-technical-user-guide.md](docs/non-technical-user-guide.md)。有关基于浏览器的 UI,请参阅 [docs/ui-mode.md](docs/ui-mode.md)。有关必需下载项、浏览器驱动程序和可移植发布包,请参阅 [docs/dependencies-and-packaging.md](docs/dependencies-and-packaging.md)。有关发布工程,请参阅 [docs/RELEASE.md](docs/RELEASE.md)。有关每个配置键,请参阅 [docs/configuration-reference.md](docs/configuration-reference.md)。 ## 功能 - 使用 Selenium 爬取已授权的网站。 - 支持 `modern-edge`、`chrome` 和 `edge-ie-mode-assisted` 模式。 - 捕获 HTML、截图、DOM 派生证据、标题、链接、按钮、表单、标签、图像、表格、iframe、ARIA 属性、可聚焦元素和传统风险。 - 针对内置规则包运行确定性静态检查。 - 可从提供的 PDF 中提取指导性覆盖层。 - 生成 JSON、HTML、Markdown、CSV、执行摘要和 Azure DevOps 待办项 CSV 报告。 - 导入手动发现,用于 IE 模式和辅助技术验证。 ## 本工具不做什么 此工具不: - 认证 ADA 合规性。 - 认证 WCAG 合规性。 - 认证 Section 508 合规性。 - 替代手动无障碍评审。 - 保证合规性。 - 需要 AI。 - 将敏感页面内容上传到云服务。 - 存储用户名或密码。 - 绕过身份验证或授权控制。 自动化测试不能替代手动无障碍测试。仍然需要屏幕阅读器、键盘、用户流和辅助技术测试。 ## 官方参考 - [ADA Title II 网络和移动应用无障碍规则](https://www.ada.gov/resources/2024-03-08-web-rule/) - [WCAG 2.1](https://www.w3.org/TR/WCAG21/) - [WCAG 2.2](https://www.w3.org/TR/WCAG22/) - [Section 508 测试资源](https://www.section508.gov/test/) - [ICT 测试基线](https://ictbaseline.access-board.gov/) ## 架构 ``` flowchart LR CLI["CLI Host"] --> Core["Core Rules and Static Engine"] API["ASP.NET Core API"] --> Core Core --> Infra["Infrastructure: Selenium, PDF, HTML, CSV"] Core --> Reporting["Reporting: HTML, Markdown, JSON, CSV, ADO"] Infra --> Browser["Edge / Chrome / IE-mode-assisted"] Infra --> PDF["User PDF Overlay"] Reporting --> Reports["Portable Reports"] ``` ## 版本锁定 项目版本:`Directory.Build.props` 和 `VERSION.txt` 中的 `1.0.0`。 运行时和主要包锁定: | 组件 | 版本 | | --- | --- | | .NET 目标框架 | `net8.0` | | Selenium.WebDriver | `4.27.0` | | Selenium.WebDriver.ChromeDriver | `131.0.6778.20400` | | Selenium.WebDriver.MSEdgeDriver | `147.0.3912.98` | | UglyToad.PdfPig | `1.7.0-custom-5` | | HtmlAgilityPack | `1.11.71` | | AngleSharp | `1.1.2` | | CsvHelper | `33.0.1` | | Scriban | `7.2.0` | | Swashbuckle.AspNetCore | `6.9.0` | | xUnit | `2.9.3` | 仓库关键词:`accessibility`、`wcag`、`ada-title-ii`、`section-508`、`selenium`、`dotnet-8`、`csharp`、`ie-mode`、`static-analysis`、`azure-devops`。 ## 下载发布版 从 [GitHub Releases](https://github.com/nprasann/legacy-accessibility-static-crawler/releases) 下载打包的发布版。 Windows: ``` Expand-Archive .\legacy-accessibility-static-crawler-1.0.0-win-x64.zip -DestinationPath .\legacy-accessibility-static-crawler cd .\legacy-accessibility-static-crawler .\legacy-a11y-crawler.exe --help .\legacy-a11y-crawler.exe version ``` Linux: ``` mkdir legacy-accessibility-static-crawler tar -xzf legacy-accessibility-static-crawler-1.0.0-linux-x64.tar.gz -C legacy-accessibility-static-crawler cd legacy-accessibility-static-crawler chmod +x ./legacy-a11y-crawler ./legacy-a11y-crawler --help ./legacy-a11y-crawler version ``` macOS Apple Silicon: ``` mkdir legacy-accessibility-static-crawler tar -xzf legacy-accessibility-static-crawler-1.0.0-osx-arm64.tar.gz -C legacy-accessibility-static-crawler cd legacy-accessibility-static-crawler chmod +x ./legacy-a11y-crawler ./legacy-a11y-crawler --help ./legacy-a11y-crawler version ``` 同时从发布版下载 `SHA256SUMS.txt` 并在内部分发前验证包哈希值。此工具是无障碍评估助手;它不认证 ADA、WCAG 或 Section 508 合规性。 ## 规则来源 内置规则包位于 `src/LegacyAccessibilityCrawler.Core/RulePacks/`: - `wcag-2.1-aa-static-rules.json` - `section-508-static-rules.json` - `wcag-2.2-static-rules.json` - `rule-mapping.json` PDF 派生的规则是指导性覆盖层。它们丰富了严重性、映射、描述和补救文本,但不替代内置的确定性检查。 ## CLI 示例 提取 PDF 指导: ``` dotnet run --project src/LegacyAccessibilityCrawler.Cli -- extract-rules \ --rules-pdf ./samples/sample-rules.pdf \ --output ./reports/rules ``` Modern Edge 爬取: ``` dotnet run --project src/LegacyAccessibilityCrawler.Cli -- crawl \ --url https://example.gov \ --browser modern-edge \ --max-pages 25 \ --depth 2 \ --standard wcag21aa \ --output ./reports/example ``` Chrome 爬取: ``` dotnet run --project src/LegacyAccessibilityCrawler.Cli -- crawl \ --url https://example.gov \ --browser chrome \ --max-pages 25 \ --depth 2 \ --output ./reports/example-chrome ``` Edge IE 模式辅助爬取: ``` dotnet run --project src/LegacyAccessibilityCrawler.Cli -- crawl \ --url https://legacy.example.gov \ --browser edge-ie-mode-assisted \ --manual-session true \ --max-pages 10 \ --depth 1 \ --rules-pdf ./samples/sample-rules.pdf \ --output ./reports/legacy-ie ``` 从现有扫描结果生成报告: ``` dotnet run --project src/LegacyAccessibilityCrawler.Cli -- report \ --scan-results ./reports/example/scan-results.json \ --output ./reports/example/final ``` 版本: ``` dotnet run --project src/LegacyAccessibilityCrawler.Cli -- version ``` ## API 运行启用 Swagger 的 API: ``` dotnet run --project src/LegacyAccessibilityCrawler.Api ``` 端点: - `POST /api/crawl/start` - `POST /api/rules/extract` - `POST /api/findings/import` - `POST /api/report/generate` - `GET /api/jobs/{id}` - `GET /api/reports/{id}` - `GET /api/rulepacks` - `GET /api/rulepacks/{id}` - `GET /api/version` API 路由需要 `x-api-key` 请求头。在进程环境中使用 `ApiSecurity__ApiKeys__0` 或 `LEGACY_A11Y_API_KEY` 配置密钥;没有提交默认 API 密钥。API 爬取也受到配置中 `Crawler:AllowedDomains` 的限制,该设置应仅包含您有权测试的系统。 ## 浏览器 UI 运行 API 并打开: ``` http://localhost:5000/ui/ ``` 该 UI 提供一个爬取表单,包含常用选项的下拉菜单和文本框,包括浏览器模式、规则包、最大页面数、爬取深度、可选的 PDF 规则路径、手动登录模式和无头执行。仪表盘列出生成的报告,并直接链接到 HTML 报告、发现项 CSV、JSON 报告、执行摘要和 Azure DevOps `ado-items.csv`。 UI 包含一个 API 密钥字段,因为本地 API 受到保护。在开始爬取前,请在 `appsettings.json` 中配置授权的目标域和 API 密钥。 ## IE 模式 IE 模式系统有所不同,因为传统控件、ActiveX、旧文档模式、框架和浏览器兼容层可能不会暴露完整的自动化证据。在 `edge-ie-mode-assisted` 模式下,该工具支持手动登录/会话续接,并且当 DOM 捕获有限或检测到传统风险时,会自动添加一个传统手动审查发现项。 ## 手动发现项 可以使用 `samples/sample-manual-findings.csv` 中的示例形状从 CSV 导入手动发现项。将其用于屏幕阅读器结果、键盘发现项、IE 模式验证以及静态扫描无法证明的工作流问题。 ## 可下载的可执行文件 / 可移植发布版 初始分发基于 ZIP 格式。后续可能会提供 MSI 安装程序,但可移植 ZIP 更容易获得批准并在测试工作站上运行。 1. 从 GitHub Releases 下载适用于您平台的 ZIP 文件。 2. 在已批准的测试工作站上解压文件夹。 3. 查看 `appsettings.example.json`。 4. 运行可执行文件。 用户在使用自包含发布 ZIP 时无需 .NET SDK。他们仍然需要安装 Chrome 或 Edge。WebDriver 二进制文件在支持的情况下通过 Selenium 驱动程序包包含,但浏览器版本和驱动程序版本必须保持兼容。 Windows 示例: ``` legacy-a11y-crawler.exe --help legacy-a11y-crawler.exe crawl ^ --url https://example.gov ^ --browser modern-edge ^ --max-pages 25 ^ --depth 2 ^ --standard wcag21aa ^ --output reports/example ``` ## 发布 CLI 自包含发布示例: ``` ./scripts/publish-win-x64.ps1 -Version 1.0.0 ``` ``` ./scripts/publish-linux-x64.sh 1.0.0 ./scripts/publish-osx-arm64.sh 1.0.0 ``` 发布 ZIP 包含可执行文件、`appsettings.example.json`、README、文档、示例、LICENSE、VERSION.txt 和 CHANGELOG.md。 发布 ZIP 不包含报告、截图、原始 HTML 捕获、`.env`、凭据、Cookie 或浏览器配置文件数据。 有关详细的依赖项和打包矩阵,请参阅 [docs/dependencies-and-packaging.md](docs/dependencies-and-packaging.md)。 ## 敏感数据 报告、截图和原始 HTML 可能包含敏感信息。请使用同域爬取、查询字符串脱敏、已批准的输出位置以及不存储凭据的手动登录。不要提交生成的报告或捕获内容。 ## 测试 ``` dotnet test legacy-accessibility-static-crawler.sln ``` 测试覆盖包括规则加载、WCAG/Section 508 映射、静态检查、报告生成、ADO 导出、IE 模式免责声明行为、无 AI 模式和手动发现项导入。
标签:ADA Title II, ARIA属性检查, Azure DevOps集成, DOM证据提取, ESC漏洞, HTML内容分析, IE模式辅助, .NET 8, PDF规则叠加, Section 508, Selenium自动化, WCAG 2.1 AA, Web可访问性, 企业级工具, 可访问性测试, 可访问性评估, 截图捕获, 焦点元素分析, 离线优先, 证据收集, 辅助审查工作流, 遗留网站支持, 静态爬虫