8.7 KiB
RESEARCH: 蓝湖 Axure 原型「最新版」拉取通路(20260829 全链路验证通过)
结论先行:可行,且比 MCP 稳定得多。Axure 文件本体全部托管在公开 OSS(
lanhu-axure-file.oss-cn-beijing.aliyuncs.com),无需 Cookie、无需登录、无需 MCP。Cookie 只在第一步「拿版本清单 URL」时有用,而且该 URL 本 session 已经拿到并固化在本文档里。
背景(为什么绕开 MCP)
- 本机 lanhu-mcp(
@star_work/lanhu-mcp)的 5 个工具只支持 Sketch/Figma 设计图,lanhu_get_design/lanhu_get_screenshot对 Axure 文档直接超时(40504)。 - txt Cookie(
.scratch/opportunity-e2e/原型及蓝湖cookie.txt)注入 Playwright 后被蓝湖风控降级:页面顶部横幅「由于打开过分享页,用户状态发生变化,为安全起见,请重新登录」,文档列表页点不进查看器。 - 但 Cookie 仍能完成 SSO 认证(ticket/acquire → /api/auth 302 链路走通),
lanhuapp.com/api/*的 API 调用全部成功——嗅探到了关键的/api/project/image完整响应。 - 顺着该响应里的
json_url发现:全部 Axure 产物在 OSS 上是公开可读的。
五步通路(全部实测验证)
Step 0(可选): 拿最新版本的清单 URL(需 Cookie)
GET https://lanhuapp.com/api/project/image?team_id=b013dded-642f-4899-b829-daa5c093fdf0&project_id=e528bb49-1eea-4d76-b7e0-4055bc7c1b70&image_id=bade4454-52aa-44db-8ba2-dec594732ecb
Header: Cookie: <.scratch/opportunity-e2e/原型及蓝湖cookie.txt 里 Cookie: 行的全文>
→ 响应 result.json_url 指向 OSS 清单 JSON
web 端主文档的清单 URL 已知(无需再跑这步):
https://lanhu-axure-file.oss-cn-beijing.aliyuncs.com/md5b013dded-642f-4899-b829-daa5c093fdf0__e0c423279b681ba8705ea7fe5039ef54.json
URL 规律:md5{team_id}__{hash}.json(team_id = b013dded-642f-4899-b829-daa5c093fdf0)。
同项目其他文档(换 image_id 重跑 Step 0,均从 network-log-v2.json 的 product_documents 响应可得):
| 文档名 | image_id | 最新版本 |
|---|---|---|
| 【原型】itc信息化业务中台web端 V1.0-20260826 | bade4454-52aa-44db-8ba2-dec594732ecb |
v29(2026-08-28 14:39 GMT) |
| 【原型】itc信息化业务中台H5端 V1.0-20260826 | 44ce439e-8c16-430e-913b-d17efd2ebc2a |
v16 |
| 【旧版-线索-web】-20260819 | 8fce7f53-f59b-417b-870e-801b38f3604b |
v2 |
| 【旧版-首页+工作计划+商机】/【旧版-客户】/后台 | 见 network-log-v2.json |
— |
Step 1: 下载版本清单 JSON(公开 OSS)
GET https://lanhu-axure-file.oss-cn-beijing.aliyuncs.com/md5{tid}__{hash}.json
- web 端 v29 清单 = 182 页 + 完整 sitemap 树(A1X 工作计划 / A3 商机全族 / A4 客户管理 / A5 项目全在)
- 每页条目:
dataJs: {src, sign_md5}/html: {src, sign_md5}/mapping_md5 - 本地已存:
axure-v29.json(90KB)
Step 2: 每页下载 mapping JSON(公开 OSS)
GET https://lanhu-axure-file.oss-cn-beijing.aliyuncs.com/{mapping_md5}
返回该页全部资源的 sign_md5 映射:styles / scripts / images / html / dataJs。
样例:team-mapping.json(14.6KB,团队成员页 108 张图 + 35 个脚本 + 3 个样式)。
Step 3: 每页下载页面 HTML(公开 OSS)★ 文本主载体
GET https://lanhu-axure-file.oss-cn-beijing.aliyuncs.com/{html.sign_md5}
得到原始 Axure 导出页面 HTML(Lanhu 只把 <img src> 改成了懒加载 data-src,其余原样):
- 文本位置:每控件
<div id="uNNN" ...>内的<div id="uNNN_text" class="text"><p><span>…</span></p></div> - 控件类型:HTML 注释
<!-- 名称 (类型) -->(矩形/单元格/表格/文本框/下拉列表/复选框/动态面板/组合…) - 中文全部是
&#xHHHH;HTML 实体——不解码则一个中文字都搜不到(本 session 踩过的坑) - 表格没有
<table>标签:Axure 表格 = div 嵌套(cell =div.table_cell1+ 背景图 +_textdiv)
Step 4: 文本提取(extract-html-text.mjs 已验证可用)
提取算法(478 控件 / 249 条文本全量验证):
- 正则
/<!--\s*(.*?)\s*-->\s*<div id="(u\d+)"[^>]*>/g逐控件分组(拿到 id + 控件类型) - 在控件起始位置后 700 字符内找
id="{id}_text"的 div,提取其中全部<p><span>…</span></p> - 解码 HTML 实体(
&#xHHHH;→ 字符, → 空格等) - 输出:
id | 类型 | 名称 | 文本清单(数据行按 u 编号天然有序,表格行结构可按 id 连续性还原)
验证样例(团队成员页 a3-1-1-1-8,D-04~06 的原型依据):
表头 成员名称|所属部门|职位|项目角色|职责|加入时间|操作、8 行数据(张三-商机负责人 … 赖总-营销副总裁)、按钮「+ 添加成员」「一键拉群」「编辑」「移除」「移交」、一键拉群弹窗全文(默认带入当前商机团队…/群成员/建群设置/群名称/群类型/创建后在商机跟进回写群聊信息/+ 添加内部成员/已选择 4 名内部成员/取消/创建群聊)、需求批注区标题(1开发说明/2详细说明/3字段说明/4交互说明/5业务规则&功能逻辑/6原型体验及验收标准)。
Step 5(可选): 图片下载(公开 OSS)
GET https://lanhu-axure-file.oss-cn-beijing.aliyuncs.com/{images[X].sign_md5}
可下载,但注意:表格 cell 的 images.normal~ 指向的 PNG 是 232 字节空白背景图,没有信息量,不要浪费请求。图片仅在做视觉核对时按需拉。
坑列表(Flash 模型必读)
- data.js 不是文本载体:
lanhu_Axure_Mapping_Data({...})里表格 cell 的label全空(105/105),按钮/弹窗文本倒是有——别用 data.js 做主提取源,直接用 HTML。 - data.js 解析要括号配对算法(
$axure.loadCurrentPage(lanhu_Axure_Mapping_Data({...}))尾部有闭合括号,JSON.parse 直接炸)——parse-datajs.mjs有现成实现。 - mapping 里
scripts的 sign_md5 偶尔是完整 URL(https://axure-file-readonly.lanhuapp.com/xxx.js),直接用,别再拼 OSS 前缀。 - 终端是 cmd/PowerShell/Node 三层兜底的混乱环境:
node -e内联引号必炸,一律写 .mjs 脚本文件再node xxx.mjs;管道| head也不可用,输出重定向到文件再 Read。 - OSS 请求带
User-Agent: Mozilla/5.0即可,无 Referer 校验、无频率限制(182 页连续拉没问题)。 - 版本号要取
last_version_num(web 端当前 = 29);若原型再更新,重跑 Step 0 拿新 json_url。
本 session 已产出资产(.scratch/lanhu-latest/)
| 文件 | 用途 |
|---|---|
axure-v29.json |
web 端 v29 全量清单(182 页 + sitemap 树)— 票 01 直接输入 |
network-log-v2.json |
/api/project/image 完整响应(6 文档元数据 + 29 版本历史 + 评审批注) |
team-page.html |
团队成员页 HTML 样例(提取器验证用) |
team-mapping.json / team-page-data.js |
该页 mapping / data.js 样例 |
document.js |
Axure 文档级 sitemap(35KB,$axure.loadDocument) |
fetch-axure-json.mjs / fetch-team-html.mjs / fetch-mapping.mjs |
下载脚本(可参数化改造成全量拉取) |
extract-html-text.mjs |
文本提取器(核心资产,票 01 复用) |
sniff-axure-v2.mjs |
Cookie+Playwright 嗅探脚本(仅 Step 0 需要时用) |
关键新事实(对 bug 复测裁决有直接影响)
- 原型确实已更新:web 端主文档最新 v29(2026-08-28 14:39 GMT),晚于上轮 e2e(用的旧版本)。复测必须以 v29 为准。
- A1X 工作计划是完整模块(v29 sitemap 实锤):工作日历 / 新增工作计划 / 填写今日工作 / 工作计划详情 / 计划管理 / 出差与拜访,共 6 页。上轮 P1-4 拍板「挂起」,本轮用户点名评估。
- A4 客户管理是完整模块(30+ 页):公海 / 总览 / 我的客户 / 导入 / 新增编辑 / 详情 9 tab / 联系人 / 查重 / 合并 / 交割。
- 团队成员页证据(D-04~06):「+ 添加成员」「编辑」「移除」「移交」按钮 + 表头 + 一键拉群弹窗全部存在 → 6 个写端点缺失是实锤缺陷。
- 页面自带需求批注区:每页有「需求|需求说明|变更记录」表格,含「1开发说明/2详细说明/3字段说明/4交互说明/5业务规则&功能逻辑/6原型体验及验收标准」小节——原型自带 PRD 级说明,复测时优先读这些批注(票 01 拉全量时注意完整提取批注内容)。
- 评审批注(蓝湖平台层)走
/api/project/comment(带 Cookie),network-log-v2.json里已有响应样例;若批注正文含裁决信息可按需补拉。