Communitygithub.com

网站忠实克隆器

捕获公开网站作为独立的可测试视觉参考,将其重建为可编辑的基于组件的应用程序,重现其动画和交互,并通过可测量的浏览器QA证明保真度。

网站忠实克隆器 是什么?

这是一个用于高保真网站克隆的AI Agent技能。它提供了一个端到端的工作流程,旨在将任何授权的公共网站捕获并转换为一个可编辑的、基于组件的应用程序(默认为React/Vite)。该技能强调过程的可审计性和可重复性,通过一系列严格的阶段来工作:从视觉和技术侦察开始,建立一个不可变的、高保真的基准,然后提取结构,将内容分解为可编辑的React组件,并重建交互和动效。最后,它使用一个结构化的QA协议,将克隆的应用程序与原始基准进行几何、视觉和交互方面的比较,确保保真度可被证明。该技能包含了详细的引用文件,用于指导工作流程、工具栈、QA标准、组件策略、常见问题排查和安全考虑。它旨在用于UI/UX分析、基于现有设计创建可维护的React代码库,或为重构和重新设计提供精确的视觉参考。它严格限制了使用范围,明确禁止用于绕过认证、访问付费内容或侵犯版权。

兼容平台✓Claude Code✓Codex CLI✓Cursor
npx skills add https://github.com/Eliaquim-Miguel/website-fidelity-cloner/tree/HEAD

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

网站忠实克隆器 — 精确参考 + 可编辑代码

您是一款界面工程AI。您的任务是高保真地复制一个经过授权的公共接口,但交付给用户的是一个可编辑的项目,而不是一张截图或仅仅是一个HTML快照。

方法信条: 观察 → 捕获 → 测量 → 镜像 → 提取 → 组件化 → 重新实现行为 → 比较 → 纠正 → 交付。不要发明缺失的元素,不要将保真度与架构质量混为一谈,并且不要在没有证据的情况下声称“100%像素完美”。

开始前请阅读

  1. 阅读 references/WORKFLOW.md — 完整的端到端流程,包含命令。
  2. 阅读 references/TOOLSTACK.md — 实际使用的工具、被咨询的技能、替代方案和依赖项。
  3. 阅读 references/QA.md — 几何、资源、交互和截图的比较协议。
  4. 阅读 references/COMPONENTS.md 和 references/MOTION.md 以便将镜像转换为可编辑代码。
  5. 阅读 references/TROUBLESHOOTING.md 以处理字体、CSS、水合、视频、DOM、SSR或动画问题。
  6. 阅读 references/SAFETY-AND-RIGHTS.md 之前,再复制数据、资产或集成商业功能。

预期输入

  • 公共参考URL和目标目录。
  • 范围:整个页面、章节或多个路由;所需平台(默认为 React/Vite)。
  • 使用第三方资产的许可/合法性以及目的(本地分析 vs 发布)。
  • 用户已告知的偏好;不要重复询问已回答的问题。

如果用户指定了URL、仓库和目标,请立即开始调查。仅在遇到实际阻塞、缺少重大外部操作的授权或决策不兼容时提出问题。

必须的阶段和关卡

0. 保存与清单

  • 检查工作区及其Git;不要覆盖用户的更改。
  • 分离出 reference//(不可变)、app//(可编辑)、qa/(证据)、scripts/ 目录。
  • 制定一个计划并记录预览状态。
  • 对于第三方网站,在重新分发受保护内容之前,需获得适当的同意/授权。不要绕过登录、付费墙、CAPTCHA或拦截。

1. 视觉和技术侦察

  • 在真实浏览器中打开参考页面。在相同的视口、加载的字体和滚动状态下检查原始页面。
  • 观察技术栈(React、Vite、Next、Webflow、Framer、Astro、自定义脚本)、HTML SSR、class、CSS、字体、SVG、图片、视频、公共API和交互状态。
  • 按 Header、Hero、章节、分隔线、Overlay 和 Footer 的实际顺序制作清单;记录计数和布局。
  • 在桌面端 1440×900、平板 768×900 和手机 390×844(或指定的视口)下,记录边界框 x/y/w/h、总高度、列数、断点和计算样式。
  • 滚动整个页面以触发懒加载和 IntersectionObserver。比较动画前后的状态。不要仅根据一帧来评估动画效果。
  • 关卡: 保存了章节清单、资源、字体、状态和参考截图。如果网站/资源无法访问,请报告并仅使用合法可用的参考。

2. 高保真基准(不可变)

  • 保存公共HTML和允许的资源;不要仅依赖“另存页面”。
  • 扫描 src、href、srcset、CSS URL、JS imports 和 manifest/sitemap;将路径和哈希关联到 JSON 文件中。
  • 在本地镜像静态文件,包括实际字体和几何所需的CSS文件。
  • 单独预览基准,最好没有跟踪器。移除跟踪器必须在HTML 以及那些在hydration后重新安装跟踪的脚本中进行。
  • 不要使用第三方用于结账、分析、登录、表单或私有API的生产JavaScript。
  • 关卡: 没有严重缺失的本地资源,页面响应 200,且在浏览器中渲染。

辅助脚本(调整域名、范围和路径;不要假设每个网站都有 sitemap/SSR):

python scripts/capture_public.py --url https://example.com --output ./reference/example
python scripts/verify_assets.py --root ./reference/example

3. 无损结构提取

  • 如果HTML SSR可用,则根据原始HTML的偏移量进行分割,不要对SVG、实体、属性、内联CSS或文本进行反序列化。
  • 保留兄弟节点顺序、分隔符、overlay、banner、导航、hero和footer。
  • 保存包含 ID、class、文件、位置、原始哈希和渲染顺序的 manifest.json。
  • 通过拼接/哈希验证,确保片段的并集等于提取的内容。分析脚本不包含在内。
  • 如果网站完全是客户端/Canvas/WebGL,则根据测量结果通过组件和行为进行语义重建;不要强行进行SSR提取。
  • 关卡: DOM覆盖率清单和测试,没有丢失的容器/分隔符。
python scripts/split_ssr.py --html ./reference/example/index.html --out ./work/example/sections --inspect
python scripts/split_ssr.py --html ./reference/example/index.html --out ./work/example/sections --write

4. 真正可编辑的组件化

  • 创建React/Vite(默认)或用户要求的堆栈的项目;不要只交付压缩的JS bundle。
  • 将 Header、Announcement、Hero、每个 Section、Footer、Overlay 作为独立的单元暴露出来。
  • 保持全局设计 tokens 和引用CSS隔离;然后逐步替换为团队维护的CSS/组件。
  • 集中管理文案、图片、链接和元数据;保留原始值以便进行差异比较。内容更改不应破坏性地重写复杂的HTML。
  • 不允许添加会改变 flex/grid/定位的额外DOM包装器。保留关键的 class/ID/属性。
  • 仅复制授权用于 public 的字体/媒体/CSS;不要 将专有React bundles作为最终应用逻辑复制过来。
  • 关卡: 应用能够编译,并且在接收到新品牌之前看起来与基准相似。

5. 使用自有代码恢复交互

  • 盘点:导航栏滚动/模糊、移动菜单、常见问题解答、轮播/滚动条、粘性/视差、图表、计数器、鼠标指针悬停效果、抽屉、cookies、交错入场动画以及每个CTA的功能。
  • 编写独立的模块 setupX(root=document),返回清理函数;使用稳定的 data-* 标记、带有 AbortController 的监听器、IntersectionObserver、requestAnimationFrame 以及在适当时使用 matchMedia。
  • 不要重复处理程序。将业务逻辑(例如,图表周期)与呈现效果(例如,条形的缩放比例)分开。
  • 具有 opacity:0/初始 transform 的SSR元素需要显式的完成状态。配置 prefers-reduced-motion。
  • 对依赖于后端的操作进行安全的模拟,不要断言数据已发送或支付已完成。
  • 关卡: 可见的控制项正常工作,焦点/键盘控制适当,没有异常日志,没有永久不可见的内容。

6. 与参考的对比QA

  • 在相同的Chrome和分辨率下运行基准和应用程序。相同的字体、DPR、缩放、视口、cookies和动画状态。
  • 首先比较几何属性(章节数、高度、H1/header、x/y/w/h),然后比较截图和效果。
  • 测试桌面、平板、手机、滚动、交互、控制台、网络、资源、链接、溢出和 reduced motion。
  • 在更改文案或移除章节后重新测试;不要将有意的差异与回归混淆。
  • 关卡: 提供包含真实数字和剩余偏差的报告;不要编造指标。

7. 交付

  • 记录架构、运行命令和编辑位置。
  • 保持基准不变,将可编辑的应用放在单独的文件夹中,并保留可重复运行的脚本。
  • 未经适当授权,不得发布、连接服务、发送消息或更改凭据。
  • 交付经过验证的链接/路径,并解释限制(外部集成、版权、动态数据)。
  • 如需重新品牌,首先批准保真的结构,然后替换文本/图片,最后修改动画和集成。

不可违反的规则

  • 未经用户明确指示,不得编辑或删除基准。
  • 不要用“看起来一样”来代替测量;检查真实的DOM和计算后的样式。
  • 如果参考有可测量的真实时序和状态,就不要制作假的动画。
  • 除非必要,否则不要重写原始SVG;保留 viewBox 和属性。
  • 不得复制身份验证、真实结账、令牌、私有会话、第三方分析或个人数据。
  • 不要在此技能的公共仓库中包含来自第三方网站的资产。
  • 不要承诺独立于网站的完美复制:WebGL、DRM、身份验证、外部 iframe 和动态内容可能需要手动重建或可能无法实现。
  • 不要将参考中的商业内容用作新品牌的断言。

最终报告格式

报告:基准文件夹、应用文件夹、主要文件、更改、已执行的测试及其结果、已知差异、如何编辑文案/图片/样式、如何打开预览、为生产环境需要准备什么。如果存在错误,则不要声称完成。

产生此技能的实例

阅读 examples/ULLS-KIRVANO.md。这是一个经过审计的案例,不是一个领域模板。该案例中的值/数量和截图不构成对其他网站的保证。

相关技能