传感器选型(官网数据 → 自包含 HTML 选型工具)
把「官网在售系列清单 + 逐系列订货型号」沉淀成一个可离线打开、可筛选、可搜型号、可在手机上用的单文件 HTML 选型工具。一次搭好骨架(data_layer.py 数据层 + build_tool.py 生成器),后续加品类只改数据层、重跑生成器即出双版本,绝不手改产物。
本 skill 是品牌无关的通用方法论:可对接任意品牌官网数据,换任何品牌(如各主流传感器厂商)或换元件类型(光电/接近/激光/光纤/色标)都按同一套结构与流程走,不绑定任何单一厂商。
When to use
- 用户要"按官网型号整理选型流程 / 生成能直接选型的文档 / 把型号补全到订货号层"。
- 用户反馈"选型逻辑可以,但型号不够多"→ 走本文「补全型号」流程。
- 需要剔除退市产品、只保留在售型号(典型要求:"退市的产品就不用补充")。
- 目标是可离线分享、可扫码查阅的选型工具,而不是一份静态 PDF。
- 用户既要「内部培训版」(可含私有方法论与内部资料),又要「学员扫码看的公示版」。
贯穿全程的 4 条铁律
- 先定受众再动手:内部培训资料(厂商 CONFIDENTIAL)只能给内部版用,对外版必须源码级脱敏。用 AskUserQuestion 一次问清:受众 / 形态 / 覆盖范围 / 交付位置 / 是否要二维码。
- 只收在售:官网分类导航里列出的系列 = 在售;页面带「停止生产 / 生产终止 / 订货截止 / Discontinued」标注的必须剔除或打警告徽章。
- 不编造型号:只写官网页面原文出现的订货号;某地区站没有的系列去全球站补,并在交付说明里标明来源站。型号必须到订货号层(含 2M/M1J/M3J/R/F 等后缀),不能只到系列层。
- 系列命名以官网为准:不凭印象写系列名。子代理抓回来后必须交叉核对系列是否真实存在。命名错 → 整个数据层错。
关键检查点(必须暂停确认,防自主失控)
自动执行到以下节点时,停下用 AskUserQuestion 让用户拍板,确认无误再继续:
- C1 立项后:确认受众(内部/对外/双版本)、覆盖范围、交付位置、是否要老二维码——避免返工。
- C2 数据层填完后:确认系列数 / 型号数 / 已剔除退市清单 / 数据来源站四项数字,再进生成。
- C3 发布前(最关键):确认「双版本脱敏已到位」——尤其公示版不含作者的私有方法论整节、不含内部资料来源(商品武器/知识库)。跑
validate_struct.py出报告,确认all_ok=true且公示版section_count=4后再 deploy。
> 这三点不确认就发布,最容易把内部资料误发出去或型号口径出错。
工作流(与 references/methodology.md 配套的 10 阶段)
脚本与详细步骤见:
- references/methodology.md — 端到端交付流程(阶段 0 立项 → 9 运营)、双版本脱敏清单、发布架构、常见坑表。
- scripts/data_layer.py — 数据层骨架模板(含断言自检),用户填入真实数据。
- scripts/build_tool.py — 通用生成器,import 数据层,render(public) 一次出内部版/公示版双文件。
- scripts/validate_headless.py — 无头渲染探针(需 Edge),实测宽度/溢出/计数/JS 报错/手机 390px。
- scripts/validate_struct.py — 纯 Python 结构校验(无需 Edge,本机无无头环境时的兜底):占位符残留、页脚独立、双版本脱敏、内嵌 DATA 可解析,一键出 JSON 报告。
- assets/forwarder.html — 274B 转发器,保证老二维码永久有效。
阶段速览
| 阶段 | 核心动作 | 主交付物 |
|---|---|---|
| 0 立项定位 | 定受众/范围/交付物/署名脱敏规则 | 产品定义一页纸 |
| 1 数据口径 | 只收在售、型号到订货号层、命名以官网为准 | 口径清单 + REMOVED |
| 2 数据采集 | 并行派子代理抓型号 + 交叉复核 | 带来源的结构化清单 |
| 3 数据建模 | data_layer.py 纯数据层 + 断言自检 |
通过校验的数据层 |
| 4 生成交互 | 一套模板双版本 + Q1–Q6 筛选/搜索/索引 | 内部版 + 公示版 HTML |
| 5 无头校验 | 探针 + 390px iframe 实测手机端 | 校验报告 |
| 6 发布架构 | 转发器 index.html + 内容 app.html | 老码永久有效机制 |
| 7 线上发布 | 同子域 deploy | 链接 + 二维码(扫码即最新) |
| 8 看板(可选) | 匿名埋点 + 聚合 | dashboard.html |
| 9 运营 | 固化资产 + 小步迭代 | 可复用脚本集 |
关键操作要点(详情见 methodology.md)
- 并行派子代理抓型号:每个子代理 prompt 明确「要哪些系列、要哪些字段(检测方式/形态/距离/连接方式/订货型号)、只报官网原文型号禁止推测、每条给来源 URL、输出固定表格 + 单独一段停产结论」。比串行快得多,且子代理会纠错(如发现错误的系列命名)。
- 数据层/生成器分离:型号口径只在
data_layer.py改,重跑build_tool.py即出双版本。数据层用断言自检:占位符全替换、退市系列不在在售清单、GROUP 键有效、models分组检测方式 ⊆ 系列methods。 - 一套模板双版本:
render(public)用占位符差异注入(标题/徽章/导航/内部来源行/页脚尾注/私有方法论整节移除),脱敏在生成期完成、不靠运行时 if 或 CSS 隐藏。脚本内 assert 兜底保密红线。 - 转发器保老码:
/= 274B 转发器location.replace("/app.html?t="+Date.now());内容在/app.html(时间戳破缓存)。已发出的二维码图片编码的是根路径,永远有效、内容随时最新。 - 无头实测校验:探针脚本 +
--dump-dom拿真实宽度/溢出/计数/JS 报错;手机端用 390px<iframe>包住页面再截,避免「看着溢出其实被 Edge 最小宽度 518px 裁切」的假象。
页面必备 5 模块
- 选型操作流程(步骤条 + 关键分叉:哪一步决定走哪个系列)。
- 分面筛选(检测方式/形态/距离/特殊工况多选/放大器类型)+ 型号搜索框(
includes()片段匹配,支持LS61/BGS/M1J/IL2这类片段)。 - 系列总览表(sticky 表头 + 型号数列 + 代表型号)。
- 在售型号总索引:按系列折叠,展开后按检测方式分组列出全部订货号——用户可直接抄单。
- 数据口径与退市剔除说明:来源站、剔除清单、部分截止提醒。
常见坑(完整表见 methodology.md)
- 打开只看到裸文字 → CSS 写了
{{ }}(.replace()不还原)→ 脚本内{{→{、}}→}。 - 系列名/型号对不上官网 → 凭印象写不存在的系列名 → 以官网分类页为准、交叉核对。
- Edge 截图返回 0 不产文件 → 没指定
--user-data-dir。 - 手机截图右侧被截「溢出」 → Edge 无头最小宽度 ≈518px,390 截图是裁切假象 → 用 390px
<iframe>包住再截。 - 注入探针不执行 → 字符串里混进真换行 → script 语法错误(静默)→ 分隔符用
' ;; '。 - 公示版残留机密字样 → 只删了正文、忘了页脚 JS 拼的来源串 → assert 兜底。
- 页脚署名/告知从不显示 → 注入的是裸字面量(前无
=/+=)或页脚塞在某<section>内被整节移除带走 → 页脚做成<section>外的独立<footer id="pagefoot">并断言存在。 - 本机 Edge 无头起不来(返回 0 不产文件 / 连
--version都空)→ 无头实测没法做 → 改用python scripts/validate_struct.py 双版本.html做纯 Python 结构校验兜底(占位符/页脚独立/脱敏/数据可解析),至少保证产物结构正确再发布。 - 官网抓取被拦 / 限流 / 区域站缺型号 → 改用品牌全球站(如该品牌全球官网)或缓存快照取数据,并在交付说明里标注来源站;绝不凭记忆补型号。
交付
- 主件(可能两个):
xxx选型工具.html(内部培训版,含方法论 + 内部资料口径)+xxx选型公示版.html(对外,已屏蔽私有方法论与内部资料来源)。 - 两个都是自包含、离线可开、手机自适应;页面显著位置署用户姓名(不写公司/部门名)。
- 交付回复给四项关键数字:系列数 / 型号数 / 已剔除退市清单 / 数据来源站。
- 可选延伸:并入 Excel 作速查 sheet、导出 PNG 贴 PPT、发布为在线链接 + 二维码(先确认脱敏,别把内部版发出去)。