You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

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 上是公开可读的

五步通路(全部实测验证)

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 + 背景图 + _text div)

Step 4: 文本提取(extract-html-text.mjs 已验证可用)

提取算法(478 控件 / 249 条文本全量验证):

  1. 正则 /<!--\s*(.*?)\s*-->\s*<div id="(u\d+)"[^>]*>/g 逐控件分组(拿到 id + 控件类型)
  2. 在控件起始位置后 700 字符内找 id="{id}_text" 的 div,提取其中全部 <p><span>…</span></p>
  3. 解码 HTML 实体(&#xHHHH; → 字符,&nbsp; → 空格等)
  4. 输出: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 模型必读)

  1. data.js 不是文本载体lanhu_Axure_Mapping_Data({...}) 里表格 cell 的 label 全空(105/105),按钮/弹窗文本倒是有——别用 data.js 做主提取源,直接用 HTML
  2. data.js 解析要括号配对算法($axure.loadCurrentPage(lanhu_Axure_Mapping_Data({...})) 尾部有闭合括号,JSON.parse 直接炸)——parse-datajs.mjs 有现成实现。
  3. mapping 里 scripts 的 sign_md5 偶尔是完整 URL(https://axure-file-readonly.lanhuapp.com/xxx.js),直接用,别再拼 OSS 前缀。
  4. 终端是 cmd/PowerShell/Node 三层兜底的混乱环境:node -e 内联引号必炸,一律写 .mjs 脚本文件再 node xxx.mjs;管道 | head 也不可用,输出重定向到文件再 Read。
  5. OSS 请求带 User-Agent: Mozilla/5.0 即可,无 Referer 校验、无频率限制(182 页连续拉没问题)。
  6. 版本号要取 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 复测裁决有直接影响)

  1. 原型确实已更新:web 端主文档最新 v29(2026-08-28 14:39 GMT),晚于上轮 e2e(用的旧版本)。复测必须以 v29 为准。
  2. A1X 工作计划是完整模块(v29 sitemap 实锤):工作日历 / 新增工作计划 / 填写今日工作 / 工作计划详情 / 计划管理 / 出差与拜访,共 6 页。上轮 P1-4 拍板「挂起」,本轮用户点名评估。
  3. A4 客户管理是完整模块(30+ 页):公海 / 总览 / 我的客户 / 导入 / 新增编辑 / 详情 9 tab / 联系人 / 查重 / 合并 / 交割。
  4. 团队成员页证据(D-04~06):「+ 添加成员」「编辑」「移除」「移交」按钮 + 表头 + 一键拉群弹窗全部存在 → 6 个写端点缺失是实锤缺陷。
  5. 页面自带需求批注区:每页有「需求|需求说明|变更记录」表格,含「1开发说明/2详细说明/3字段说明/4交互说明/5业务规则&功能逻辑/6原型体验及验收标准」小节——原型自带 PRD 级说明,复测时优先读这些批注(票 01 拉全量时注意完整提取批注内容)。
  6. 评审批注(蓝湖平台层)走 /api/project/comment(带 Cookie),network-log-v2.json 里已有响应样例;若批注正文含裁决信息可按需补拉。