返回资讯中心
外部精选
软件工程
#开发者实时流

Perfectclone 发布:15 秒抓取任意网站真实前端代码,不用 AI 重写

来源标题:Show HN: Perfectclone – Yoink the source code of any website, not an AI clone

Perfectclone 推出开源工具,可在约 15 秒内 1:1 克隆任意公开网站的真实前端源码。它用 Playwright 浏览器抓取网站自身的 HTML、JavaScript、CSS、字体和图片,输出可直接部署、编辑的文件夹,而非用 AI 生成仿制页面。工具通过 pip 安装,支持 Next.js 等需客户端水合的站点。

Hacker News 最新eshaangulati2026/11/15 · 今天15 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

把任何公开网站的真实前端抓下来,大约 15 秒。不用 AI,不消耗 token。 perfectclone 能把任何网站 1:1 克隆下来。它用真实浏览器(Playwright)爬取站点, 下载站点自己的 HTML、JavaScript、CSS、字体和图片,给你一个可以直接提供服务、编辑和部署的文件夹。 然后你可以给克隆改名换牌、换域名托管,并在不弄坏站点的前提下剥离原所有者的追踪器,包括加载时进行 hydration 的 Next.js 站点。 pip install perfectclone perfectclone clone example.com perfectclone serve example.com # → http://localhost:8000 就这么简单。第一次克隆时会自动下载 Chromium。需要 Python 3.10+。 或者什么都不装,直接用 uv 试用: uvx perfectclone clone example.com 为什么不用 AI 克隆器? 如今大多数“克隆任何网站”的工具都是重新生成站点:AI agent 查看截图或抓取到的标记,写一个新的 React/Next.js 应用,再用视觉相似度分数把结果和原站对比,直到足够接近。这样得到的是一个长得像的东西。代码是新的,行为是近似的,而且总有差距。 perfectclone 不重新生成任何东西。它镜像站点实际提供的字节,所以克隆就是站点本身:相同的标记、相同的 bundle、相同的动画、相同的 JavaScript 在运行。 有时候真正的解决方案就是简单的那个。 每张卡片是一个站点从中间劈开:左边是线上站点,右边是克隆。 scripts/compat.py 会克隆每个站点、提供副本服务,并在 1440×900 下把它的首页和线上首页对比,动画和视频暂停在同一帧: 每个克隆加载时对追踪器的请求都是零。你可以自己运行 python scripts/compat.py,任何站点结果不对请开 issue。 perfectclone clone <url> [-o out] [--max-pages 200] [--extract] [--keep-trackers] [--ignore-robots] perfectclone serve <site> [-p 8000] perfectclone replace <site> <old> <new> [--exact-case] [--substring] perfectclone rehost <site> <old-origin> <new-origin> perfectclone strip-trackers <site> clone 会写出 out/site/(工作副本)和 out/manifest.json(页面、失败项、站点使用的第三方主机)。--extract 还会把每个页面的文本、元数据(标题、链接、图片、表单、JSON-LD)和整页截图保存到 out/extract/。追踪器默认会被剥离。 replace 在所有地方重命名文本:HTML、JS、CSS、JSON、SVG。它还会处理大写、小写和首字母大写变体,并且不改动 URL 和资源路径,所以不会有 404。 rehost 把 canonical、Open Graph、JSON-LD 和 sitemap 的 URL 指向你的域名。 serve 的行为像静态主机:干净的 URL(/about → /about/index.html),并且 /_next/image 请求会从镜像的原始文件提供。 给克隆改名换牌并上线: perfectclone clone acme.com -o acme perfectclone replace acme "Acme" "Globex" perfectclone rehost acme https://acme.com https://globex.com npx netlify-cli deploy --dir acme/site --prod # 或任何静态主机 工作原理 用真实浏览器爬取。每个页面在 Chromium 中渲染并滚动到底部,每个响应都被记录下来。这样能抓到静态镜像漏掉的东西:代码分割的 JS chunk、从 CSS 请求的字体、懒加载背后的图片。链接按广度优先跟进,从 sitemap 播种。除非传 --ignore-robots,否则遵守 robots.txt。 镜像服务器的字节。页面保存为服务器发送的 HTML,而不是渲染后的 DOM,因为站点的 JavaScript 期望的就是这个来 hydrate。资源保留它们的 URL 路径,CSS/JS 会被扫描以寻找更多引用(url()、srcset、chunk 路径),直到没有新东西出现。 编辑而不破坏 hydration。一个 Next.js App Router 页面会提供它的 HTML,以及在 self.__next_f.push(...) script chunk 中序列化的 React 树副本。改了一个而不改另一个,React 会抛出 hydration 错误并从 payload 重新渲染,把你的编辑撤销。perfectclone 解码 payload 流,逐行编辑,重新计算带长度前缀的文本行的 UTF-8 字节长度(<id>:T<hex>,…),重新拼接跨 chunk 的行,并把它写回与匹配的 HTML 编辑旁边。 剥离追踪器。Google Analytics/Tag Manager、Meta pixel、LinkedIn Insight、Hotjar、Clarity、Segment、PostHog、HubSpot、TikTok、Reddit、X、Cloudflare Web Analytics、RB2B 等等。它们会从 <script>/<noscript> 标签、preload 提示,以及只存在于 payload 中的 Next.js next/script 元素里被移除。 限制 没有后端。表单、登录、搜索和 API 调用仍然会发到原始服务器(或者失败)。perfectclone 复制的是前端。 Next.js 客户端导航需要每个页面的 RSC payload 响应 ?_rsc= 请求。perfectclone 会镜像它们,perfectclone serve 会路由它们。在普通静态主机上,内部链接会回退到整页加载:一切仍然能用,只是没有即时过渡。 只在点击后才请求的 chunk(比如某个模态框的代码)如果爬取触发了它们,或者某个 bundle 把它们的 URL 作为字符串命名,就会被捕获。bundle 也可能在运行时拼出 chunk URL,那一个可能会漏掉。 机器人防护(CAPTCHA、激进的 Cloudflare 规则)可能阻止爬取。perfectclone 不会试图绕过它。 嵌入内容(YouTube、Cal.com、地图)和第三方 CDN 仍然从它们自己的主机加载。 路线图 克隆登录后的应用,比如仪表盘。目前 perfectclone 只能看到匿名访客看到的内容,页面渲染后从 API 加载的数据不会被保留。对于你有账号的应用,计划是: 结果是一个可点击的 UI 快照及其捕获时的数据。保存、服务端过滤和实时更新仍然需要真实后端。 其他想法:对 Nuxt、SvelteKit 和 Remix payload 的 hydration 感知编辑,以及一个部署助手,写出 _redirects / vercel.json 规则,让 ?_rsc= 和 /_next/image 在静态主机上工作。欢迎贡献。 perfectclone 是 MIT 许可证下的开源项目。Issue 和 pull request 是

(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →