我用设计图 Penpot-MCP + Playwright + Claude Code,手动跑通了一次 AI 还原页面闭环

0 阅读6分钟

我用设计图 Penpot-MCP + Playwright + Claude Code,手动跑通了一次 AI 还原页面闭环

说明:这篇文章已经按 Markdown 写好,适合直接复制到掘金。
文中图片目前使用仓库相对路径,适合本地仓库或 GitHub Pages 预览;如果你要发掘金,把对应图片拖到相应位置替换即可。
仓库路径:github.com/dongge12345…

最近我在系统学习 Claude Code,想验证一件事:

如果把设计图 MCP、浏览器自动化、Claude Code 和大模型能力串起来,能不能真正跑通一条从“设计稿输入”到“页面产出”的闭环?

这次我做了一次比较完整的手动实践。虽然最终页面还不是像素级还原,局部细节也还有优化空间,但这次最大的收获不是“复刻得多像”,而是我已经把一条 AI 工程化链路亲手跑通了。

这次用到的能力组合是:

  • 设计图 MCP
  • Playwright
  • Claude Code
  • 阿里云百炼免费模式

我更关注的不是某个底层 API,而是这套 AI 协作流程到底能不能落地。

一、我这次到底在验证什么

这次实践的目标,不是单纯让 AI “写一个页面”,而是验证下面这条链路:

设计图输入 -> Claude Code 生成页面 -> 浏览器截图验证 -> 继续反馈问题 -> 再次调整 -> 最终结果沉淀

如果这条链路能稳定跑通,那它的意义就不只是“做出一个页面”,而是说明:

  • AI 可以真正参与前端还原工作
  • AI 不只是一次性生成代码,还可以进入“生成 -> 验证 -> 修正”的循环
  • 这套方式后面可以继续复用到更多项目里

二、AI 调用流程是怎么串起来的

我这次的实际流程大概是这样的:

  1. 先用设计图 MCP 获取设计稿里的页面结构、布局和视觉信息。
  2. 再把这些信息交给 Claude Code,让它先生成第一版页面代码。
  3. 用 Playwright 打开页面并截图,观察真实效果。
  4. 把截图中看到的问题继续反馈给 Claude Code,让它迭代调整。
  5. 最后保留设计图、效果图、页面代码和 README,形成一次完整实践记录。

这一套下来,我最大的感受是:

AI 真正有价值的地方,不是“一次写对”,而是它能够进入一个可验证、可反馈、可继续优化的流程。

三、最终效果怎么样

1. 设计图总览

design.png

2. 登录页效果

loginPage.png

3. 选题页效果

pickPage.png

4. 选标签页效果

selectTagPage.png

从最终效果看,页面结构、层级和交互流程已经基本跑通了:

  • 登录页做出来了
  • 选题页做出来了
  • 选标签页也做出来了
  • 整个流程可以从页面切换、截图验证一路走通

当然,问题也很明显:

  • 还原度不是百分之百
  • 一些细节间距、素材选择、局部比例还有偏差
  • 设计稿的视觉精度和 AI 最终产出之间,还是存在差距

但这并不影响这次实践的价值,因为我这次验证的重点,本来就不是“像素级还原”,而是“AI 协作闭环是否可行”。

四、核心代码是怎么实现的

这次我保留的最终页面代码在 day5_figma/index.html

整体实现并不复杂,重点是先让页面结构、交互和验证流程跑通。比如页面切换部分,就是直接用最简单的类名切换去做:

<button class="btn btn-primary" onclick="showTopics()">REGISTER</button>
function showTopics() {
  document.getElementById('registerPage').classList.remove('active');
  document.getElementById('topicsPage').classList.add('active');
}

function showTags() {
  document.getElementById('topicsPage').classList.remove('active');
  document.getElementById('tagsPage').classList.add('active');
}

主题卡片的选择状态,也用了一个很直观的切换逻辑:

function toggleTopic(card) {
  const plusIcon = card.querySelector('.plus-icon');
  const circle = plusIcon.querySelector('circle:first-child');
  const lines = plusIcon.querySelectorAll('line');

  if (plusIcon.classList.contains('selected')) {
    plusIcon.classList.remove('selected');
    circle.setAttribute('fill', '#fff');
    lines.forEach(line => line.setAttribute('stroke', '#000'));
  } else {
    plusIcon.classList.add('selected');
    circle.setAttribute('fill', '#000');
    lines.forEach(line => line.setAttribute('stroke', '#fff'));
  }
}

这类代码本身不算复杂,但它说明了一件很重要的事:

在 AI 实践里,很多时候第一目标不是“架构有多高级”,而是先把流程跑通,把可验证结果拿到手。

五、这次实践我最真实的收获

这次让我感受最深的,不是“Claude Code 能不能写页面”,而是:

当我开始把它和设计图 MCP、Playwright、真实截图验证结合起来时,AI 就不再只是一个聊天工具,而开始像一个真正能参与工作流的搭子。

我觉得这次最值得记录的收获有 3 个:

  1. AI 最有价值的不是一次生成,而是进入多轮反馈闭环。
  2. 浏览器截图验证这一步非常关键,它让“感觉差不多”变成“我能看见问题”。
  3. 设计稿 MCP + Claude Code + 验证工具的组合,已经具备继续工程化的基础。

六、这次实践的不足

如果实话实说,这次离“非常惊艳的还原效果”还有距离。

主要问题包括:

  • 视觉细节还不够准
  • 局部布局和留白还不够精细
  • 设计素材和页面结果之间还有一定误差

但我现在的判断是:

这类问题更多是“模型理解和调优问题”,不是“这条路走不通”。

也就是说,方向是成立的,只是细节还有优化空间。

七、为什么我觉得这件事值得写出来

因为很多人提到 AI 编程,还是停留在“帮我写个组件”“帮我改个 bug”这个层面。

但我这次真正感兴趣的是:

能不能把 AI 放进一个更完整的研发流程里,让它参与:

  • 输入理解
  • 页面生成
  • 效果验证
  • 问题修正
  • 结果沉淀

而这次实践至少证明了一件事:

这条链路是能跑通的。

哪怕现在还不是满分结果,它也已经足够说明,AI 在前端还原、页面验证和流程协作这件事上,已经不是“玩具级别”的存在了。

八、结尾

这次实践之后,我对 AI 工程化的理解更具体了。

以前我更容易把 AI 当成“一个会回答问题的工具”,但现在我更愿意把它看成:

一个可以接入设计图、接入浏览器验证、接入代码仓库,并在真实工作流里持续协作的能力节点。

这也是我接下来想继续深挖的方向:

不是只问 AI 一个问题,而是让它进入完整流程,和我一起把事情做成。

如果你也在学 Claude CodeMCPPlaywright 这类东西,我很建议你也做一次类似的闭环实践。
哪怕结果不完美,只要你真的把链路跑通一次,理解就会和只看视频完全不一样。