安装方式
命令行安装
在项目根目录执行以下命令,完成 Skill 安装。
npx bzskills add zai-org/GLM-skills --skill glmv-web-replication 前端视觉复制技能。通过 Playwright MCP 或 agent-browser 探索目标网站的公开可见页面,捕获屏幕截图和布局信息,然后生成一个静态或客户端前端副本,近似还原原版的视觉效果和页面结构。此技能仅复制前端展示内容——不复制后端逻辑、服务器端行为、数据库或任何非公开内容。用户需自行确保在复制任何网站前已获得适当授权(所有权、许可或明确许可)。 ⚠️ 授权门禁:开始前,代理必须与用户确认其拥有复制目标网站的合法权利。若用户无法确认,则技能必须拒绝继续。
38
下载量
命令行安装
在项目根目录执行以下命令,完成 Skill 安装。
npx bzskills add zai-org/GLM-skills --skill glmv-web-replication name: glmv-web-replication
description: |-
前端视觉复制技能。通过 Playwright MCP 或 agent-browser 探索目标网站的公开可见页面,捕获屏幕截图和布局信息,然后生成一个静态或客户端前端副本,近似还原原版的视觉效果和页面结构。此技能仅复制前端展示内容——不复制后端逻辑、服务器端行为、数据库或任何非公开内容。用户需自行确保在复制任何网站前已获得适当授权(所有权、许可或明确许可)。
⚠️ 授权门禁:开始前,代理必须与用户确认其拥有复制目标网站的合法权利。若用户无法确认,则技能必须拒绝继续。
read_when:
- When the user wants to create a frontend visual replica of a website they own or have explicit permission to replicate
- When the user needs a static/HTML approximation of a website’s visual design and layout
- When the user wants to study and reproduce a website’s frontend page structure and styling
allowed-tools: Bash(glmv-web-replication:*)本工作流依赖于 Playwright MCP 或 agent-browser 技能。只要至少其中一项已安装且可用,工作流即可正常运行。如果您的环境中两者均不可用,请提醒用户安装其中之一。
在继续之前,Agent 必须询问用户:
“您是否拥有此网站,或者是否已获得所有者明确的书面许可进行复制?未经授权的复制可能违反版权、服务条款或适用法律。”
本技能仅复制前端视觉呈现。具体而言:
| 包含项 | 不包含项 |
|---|---|
| 页面布局与视觉样式 | 后端/服务器端逻辑 |
| 导航结构 | 数据库与数据存储 |
| 公开可见的文本与图片 | 认证系统/会话 |
| CSS/设计令牌 | API 业务逻辑 |
| 客户端交互模式 | 非公开或需登录的内容 |
| 静态资源文件(图片、字体) | 凭据、密钥或 API 密钥 |
数据处理规则:
示例蓝图文件夹结构:
blueprint/
├── _meta.md # 站点级元数据
├── _sitemap.md # 站点地图
├── _assets/ # 全局资源(字体、favicon 等)
├── home/ # 首页
│ ├── _page.md # 页面蓝图(区块、组件、交互摘要)
│ ├── _full.png # 全页截图
│ ├── _scroll_00.png ~ N.png # 滚动截图序列
│ ├── _interactions.md # 所有交互的记录
│ ├── _interactions/ # 交互状态截图(按交互类型组织)
│ ├── _assets/ # 此页面的资源(图片、视频等)
│ ├── products/ # 从首页可到达的“产品列表”
│ │ ├── _page.md
│ │ ├── _full.png
│ │ ├── _scroll_00.png ~ N.png
│ │ ├── _interactions.md
│ │ ├── _interactions/
│ │ ├── _assets/
│ │ ├── product-detail/ # 从产品列表可到达的“产品详情”
│ │ │ ├── _page.md
│ │ │ └── ...
│ │ └── category/ # 从产品列表可到达的“分类筛选”
│ │ └── ...
│ ├── about/ # 从首页可到达的“关于我们”
│ │ └── ...
│ ├── blog/ # 从首页可到达的“博客”
│ │ └── ...
│ └── login/ # 从首页可到达的“登录”
│ └── ...
└── _navigation_graph.md # 站点级导航图(Mermaid)
整个过程分为五个阶段:初始化 → 递归收集页面并构建站点地图 → 生成摘要输出 → 前端视觉复制 → 视觉比较与修正。
前三个阶段专注于探索和文档编制,最后两个阶段专注于基于收集到的蓝图实现前端副本并进行视觉验证。下面以 agent-browser 工作流为例;如果使用 Playwright MCP,整体流程和用法基本相同,可参照执行。
# 创建蓝图根目录
mkdir -p blueprint/_assets
# 打开浏览器并访问目标站点
agent-browser open <目标 URL>
agent-browser set viewport 1920 1080
agent-browser wait --load networkidle
将以下内容写入 blueprint/_meta.md:
# 网站复制蓝图
- 目标网站:<URL>
- 探索日期:<日期>
- 视口大小:1920×1080
对于递归发现的每个页面,执行以下标准流程:
首先截取全页截图 → 下载资源 → 遍历交互状态 → 向下滚动 → 再次下载资源 → 再次遍历交互状态 → 再次向下滚动 → ... → 继续直到页面底部。
#### 2.1:资源下载
打开页面并等待其完全加载后,收集页面上的所有资源链接(图片、视频、字体等),并尽可能将它们下载到该页面的 _assets/ 目录中。记录所有失败的下载及失败原因。
#### 2.2:遍历交互状态
获取页面上的交互元素列表,与所有元素进行交互,捕获 UI 变化,并记录所有新发现的页面。
# === 示例:使用向下滚动前的产品列表页面 ===
agent-browser open <产品列表 URL>
agent-browser screenshot blueprint/home/products/_scroll_00.png
agent-browser wait --load networkidle
agent-browser snapshot -i
# 假设输出为:
# button "全部" [ref=e1] ← 筛选标签
# button "电子产品" [ref=e2]
# card "产品 A" [ref=e3] ← 产品卡片
# select "排序" [ref=e4] ← 排序下拉框
# link "首页" [ref=e5] ← 面包屑链接
# button "了解更多" [ref=e6] ← 产品卡片内的按钮
# --- 交互 1:悬停产品卡片 ---
agent-browser hover @e3
agent-browser screenshot blueprint/home/products/_interactions/card_hover.png
# --- 交互 2:点击筛选标签 ---
agent-browser click @e2
agent-browser wait --load networkidle
agent-browser screenshot blueprint/home/products/_interactions/filter_electronics.png
# --- 交互 3:更改排序 ---
agent-browser select @e4 "价格:从低到高"
agent-browser wait --load networkidle
agent-browser screenshot blueprint/home/products/_interactions/sort_price_asc.png
# --- 交互 4:点击产品卡片(触发导航) ---
agent-browser click @e3
agent-browser wait --load networkidle
agent-browser get url # → /products/123
agent-browser screenshot blueprint/home/products/product-detail/_full.png --full
agent-browser back
# --- 交互 5:点击面包屑“首页” ---
agent-browser click @e5
agent-browser wait --load networkidle
agent-browser get url # → /
agent-browser screenshot blueprint/home/_full.png --full
agent-browser back
# --- 交互 6:点击“了解更多”按钮(外部导航) ---
agent-browser click @e6
agent-browser wait --load networkidle
agent-browser get url # → https://www.angelokeirsebilck.be/
agent-browser screenshot blueprint/home/products/_interactions/learn_more_external.png --full
agent-browser back
将更新的站点地图写入 blueprint/_sitemap.md。
将更新的页面收集结果写入 blueprint/home/products/_page.md:
# 产品列表页面
- URL:/products
- 来源:首页主导航“产品”链接
## 区块结构
| 编号 | 区块名称 | 布局模式 | 内容类型 |
|------|----------|----------|----------|
| 1 | 页面头部 | 全宽单列 | H1 标题 + 描述性文本 |
| 2 | 筛选栏 | 水平布局 | 分类标签 + 排序下拉框 |
| 3 | 产品网格 | 3 列网格 | 产品卡片 × N |
| 4 | 分页 | 居中单列 | 分页按钮组 |
## 截图
- 全页:
- 滚动序列: 
## 出站导航
| 触发元素 | 触发方式 | 目标 | 子文件夹 |
|----------|----------|------|----------|
| 产品卡片 | 点击 | /products/:id | ./product-detail/ |
| 分类标签 | 点击 | /products/category/:slug | ./category/ |
| 面包屑“首页” | 点击 | / | (返回父级) |
| 了解更多按钮 | 点击 | https://www.angelokeirsebilck.be/ | 无 |
## 页面资源
| 文件 | 用途 |
|------|------|
| _assets/product-01.jpg | 产品卡片缩略图 |
| _assets/product-02.jpg | 产品卡片缩略图 |
将所有更新的交互写入 blueprint/home/products/_interactions.md:
# 产品列表页面 - 交互行为
## 交互列表
| 元素 | 触发方式 | 行为 | 导航 | 截图 |
|------|----------|------|------|------|
| 产品卡片 | 悬停 | 卡片抬起 + 阴影加深 | 否 |  |
| 产品卡片 | 点击 | 导航至产品详情 | 是 → ./product-detail/ | — |
| 筛选标签“电子产品” | 点击 | 列表刷新为电子产品分类 | 否(AJAX) |  |
| 排序下拉框 | 选择 | 产品列表重新排序 | 否(AJAX) |  |
| 面包屑“首页” | 点击 | 导航至首页 | 是 → ../ | — |
| 了解更多按钮 | 点击 | 打开外部链接 | 是 → https://www.angelokeirsebilck.be/ | — |
## 状态转换
默认列表 --[点击筛选标签]--> 筛选后列表
默认列表 --[更改排序]--> 排序后列表
产品卡片(默认) --[悬停]--> 产品卡片(悬停状态)
产品卡片 --[点击]--> /products/:id(导航)
了解更多按钮 --[点击]--> 外部链接(导航至 https://www.angelokeirsebilck.be/)
完成所有页面收集后,生成全局摘要文件。
#### blueprint/_sitemap.md
# 站点地图
home/ # /(首页)
├── products/ # /products(产品列表)
│ ├── product-detail/ # /products/:id(产品详情)
│ └── category/ # /products/category/:slug(分类)
├── about/ # /about(关于我们)
├── blog/ # /blog(博客列表)
│ └── blog-post/ # /blog/:slug(博客文章)
├── contact/ # /contact(联系我们)
└── login/ # /auth/login(登录)
└── register/ # /auth/register(注册)
#### blueprint/_navigation_graph.md
# 站点级导航图
graph LR
Home["home /"] -->|导航 - 产品| Products["products /products"]
Home -->|导航 - 关于| About["about /about"]
Home -->|导航 - 博客| Blog["blog /blog"]
Home -->|页头 - 登录| Login["login /auth/login"]
Products -->|卡片点击| Detail["product-detail /products/:id"]
Products -->|筛选标签| Category["category /products/category/:slug"]
Blog -->|文章卡片| Post["blog-post /blog/:slug"]
Login -->|注册链接| Register["register /auth/register"]
## 导航详情
| 编号 | 源文件夹 | 触发元素 | 目标文件夹 | 导航类型 |
|------|----------|----------|------------|----------|
| N001 | home/ | 主导航“产品” | home/products/ | 内部 |
| N002 | home/ | 英雄区 CTA 按钮 | home/products/ | 内部 |
| N003 | home/products/ | 产品卡片 | home/products/product-detail/ | 内部 |
| N004 | home/products/ | 分类标签“电子产品” | home/products/category/ | 内部 |
| N005 | home/products/ | 面包屑“首页” | home/ | 内部 |
| N006 | home/products/ | 了解更多按钮 | 外部链接 https://www.angelokeirsebilck.be/ | 外部 |
| ... | ... | ... | ... | ... |
#### 关闭浏览器
agent-browser close
完成网站探索和蓝图生成后,基于所收集的蓝图构建前端视觉复制品。在复制过程中,参考蓝图中的页面结构、视觉样式和公开可用的资源,使用您偏好的前端工具和框架重建网站的客户端呈现。目标是接近原版的视觉设计和导航——而不是复现后端行为或非公开功能。
完成前端复制后,使用 Playwright MCP 或 agent-browser 技能同时渲染原始网站和复制版本,系统性地比较两者在布局、颜色、排版和导航结构方面的视觉一致性,逐页验证视觉接近程度,并根据比较结果进行调整。
_sitemap.md、_navigation_graph.md 以及相关页面的 _page.md 文件中记录。_page.md — 页面蓝图(区块、组件、出站导航)_full.png — 全页截图_interactions.md — 交互行为记录_interactions/ — 交互状态截图目录_assets/ — 页面特定资源_scroll_00.png ~ _scroll_N.pngcurl 下载图片,使用 agent-browser eval 或 Playwright MCP 提取 SVG 源代码并保存。所有失败的下载必须连同失败原因一起记录。_page.md 和 _interactions.md,使输出始终保持与当前探索状态同步。agent-browser 的调用只能执行一个命令,例如截取截图、获取元素列表或执行一次交互。不要在一次调用中组合多个命令。示例中的连续命令仅用于说明工作流;实际执行时必须拆分为独立的调用。_full.png 用于记录页面的整体视觉概览,而滚动截图序列(_scroll_00.png ~ _scroll_N.png)可以记录每个片段的细节。在网站复制过程中,应同时参考全页截图的整体信息和滚动截图序列的详细信息,以确保视觉再现准确且细节恢复完整。