空运提单追踪(AWB Tracker)
这个技能解决什么
你手里只有一张 AWB(空运提单)截图或一串号码,想知道货到哪了。
为什么需要它,而不是随手一搜: 主流航司的官网追踪页是 Salesforce / LWC 前端 + 反爬校验,纯 curl / requests / 普通网页抓取工具拿不到数据(已实测:卡塔尔航空货运旧版 /trackshipment?docNumber= 接口已下线返回 404;第三方聚合站 track-trace 对 QR 运单不出数据)。唯一稳定路径是真实浏览器驱动官方页面——这正是本技能做的事。
核心能力
| 能力 | 说明 | |---|---| | 官方轨迹抓取 | 打开航司官网追踪页,填表提交,取全页文本 | | 结构化解析 | 把乱序文本解析成按时间排列的事件链(节点 / 日期 / 时间 / 件重 / 航段) | | 增量 diff | 与上次结果比对,只说新增动态;无变化就明说「无变化」,不重复昨天的信息 | | 归档留证 | 每次运行的原始页面文本 + 全页截图落盘,出问题可回溯 |
快速开始
python3 scripts/track_awb.py --awb 157-12345675
常用参数:
--awb 157-12345675—— 临时查单个单号,不必先写配置--json—— 输出 JSON,便于其他程序消费--no-screenshot—— 跳过截图,提速
批量追踪:把运单写进 ~/.workbuddy/awb-tracker/shipments.json,然后不带参数运行,会逐个查询并给出汇总报告。
前置条件
agent-browserCLI(本技能已适配 v0.27.0+)- 首次运行需下载 Chromium(约 500MB),只做一次
npm install -g agent-browser && agent-browser install
已适配航司
| 航司 | IATA 前缀 | 追踪页 |
|---|---|---|
| 卡塔尔航空货运 Qatar Airways Cargo | 157 | qrcargo.com/s/track-your-shipment |
其余航司只需按下面三步改,通常 10 分钟内可加一家。
新增航司怎么改
- 改
TRACK_URL为目标航司追踪页。 - 改
form_refs()里的输入框 / 按钮匹配规则 —— 先跑一次agent-browser snapshot -i看实际元素。 - 改
parse_page()里的文本切片规则。
⚠️ 换航司先跑一次 agent-browser open <url> + snapshot -i + eval document.body.innerText 看清真实结构,不要凭猜测写正则。
实测踩过的坑(省你几小时)
- AWB 校验位算法:11 位 = 3 位航司前缀 + 8 位序列号,最后一位 = 前 7 位
mod 7。 (1234567 % 7 = 5→157-12345675合法)。查不到先验号码,别怀疑系统。 - 不要相信提单截图上手写的航班号 / 日期:
08SEP极易被看成08OCT。一切以官网轨迹为准。 - LWC 的 shadow DOM 极深(实测 68 层),
querySelectorAll('input')取不到元素,只有document.body.innerText能穿透。 - 每次新会话航司页面会弹 cookie 横幅,必须先点同意,否则后续操作全失败。
agent-browser screenshot的语法是screenshot [selector] [path],用-o会被当成选择器并报 "Element not found";全页截图用screenshot --full "<path>"。agent-browser eval返回的是 JSON 字符串字面量(带引号、\n转义),必须json.loads还原后才能解析。
边界说明(很重要,别误报)
航司追踪到 「Notified consignee / Received at Destination」就结束了。之后的报关、查验、放行、提货属于海关与地面代理环节,航司页面不会更新——不要把「没新动态」误报成「货卡住了」。
国内落地清关查不到时,正确做法是找目的港货代 / 报关行用提单号查,而不是继续刷航司页面。
输出约定
日报必须包含:航线、件重、官方状态原文、目的港到达时间、最新节点、航段,以及相比上次的新增动态。
无变化就明确说「无变化」。不要为了凑内容把昨天的信息改写一遍。
微信扫一扫