# 第 40 轮：阿里 listBatch 在适配器里 403、在探针里 200——区分 UA 与页面 Accept 头的影响
# A：适配器的 UA（含 polite crawler），页面 Accept 为 html
FLOW {"page":"https://campus-talent.alibaba.com/campus/position","page_headers":{"User-Agent":"jobradar/0.1 (+https://github.com/lijiaqimun-coder/job_radar; open dataset, polite crawler; contact via GitHub issues)"},"token":{"re":"__token__[\"']?\\s*:\\s*[\"']([^\"']+)","query":"_csrf"},"method":"POST","url":"https://campus-talent.alibaba.com/searchCondition/listBatch","json":{"channel":"campus_group_official_site","language":"zh"},"headers":{"User-Agent":"jobradar/0.1 (+https://github.com/lijiaqimun-coder/job_radar; open dataset, polite crawler; contact via GitHub issues)","Referer":"https://campus-talent.alibaba.com/campus/position","Origin":"https://campus-talent.alibaba.com"},"grep":"\"success\":\\w+|\"name\":\"[^\"]{2,40}\""}
# B：探针 UA，页面 Accept 为 application/json（与适配器的 client 默认头一致）
FLOW {"page":"https://campus-talent.alibaba.com/campus/position","page_headers":{"Accept":"application/json"},"token":{"re":"__token__[\"']?\\s*:\\s*[\"']([^\"']+)","query":"_csrf"},"method":"POST","url":"https://campus-talent.alibaba.com/searchCondition/listBatch","json":{"channel":"campus_group_official_site","language":"zh"},"headers":{"Accept":"application/json","Referer":"https://campus-talent.alibaba.com/campus/position","Origin":"https://campus-talent.alibaba.com"},"grep":"\"success\":\\w+|\"name\":\"[^\"]{2,40}\""}
# C：A + B 同时（即适配器的实际情况）
FLOW {"page":"https://campus-talent.alibaba.com/campus/position","page_headers":{"Accept":"application/json","User-Agent":"jobradar/0.1 (+https://github.com/lijiaqimun-coder/job_radar; open dataset, polite crawler; contact via GitHub issues)"},"token":{"re":"__token__[\"']?\\s*:\\s*[\"']([^\"']+)","query":"_csrf"},"method":"POST","url":"https://campus-talent.alibaba.com/searchCondition/listBatch","json":{"channel":"campus_group_official_site","language":"zh"},"headers":{"Accept":"application/json","User-Agent":"jobradar/0.1 (+https://github.com/lijiaqimun-coder/job_radar; open dataset, polite crawler; contact via GitHub issues)","Referer":"https://campus-talent.alibaba.com/campus/position","Origin":"https://campus-talent.alibaba.com"},"grep":"\"success\":\\w+|\"name\":\"[^\"]{2,40}\""}

# 第 41 轮：飞书 ATSX（蔚来/小鹏等，与字节同一套）。直接 POST /api/v1/search/job/posts 返回
# 405/307；CSRF（POST /api/v1/csrf/token）能匿名拿到。本地沙箱起不了浏览器，
# 用 Actions 上的 RENDERXHR 抓真实 XHR：方法、完整头、body、响应结构。
RENDERXHR https://nio.jobs.feishu.cn/campus (search|job|csrf|api)

# 第 41 轮补充：大疆走的也是 ATSX，但挂在定制域名上（apply.careers.dji.com），
# API 路径与 saas 租户不同；同样用 RENDERXHR 抓一次真实请求。
RENDERXHR https://apply.careers.dji.com/campus-recruitment/dji/143359 (search|job|csrf|api|recruit)

# 第 42 轮：hotjob（大易云）平台 —— 伊利/中联重科/歌尔/长城汽车都在用。
# 从 social.js 里能看到 /positionInfo/listPosition/<tenant> 与 /listSearchTerm/，
# 但直连是 404/405（路径前缀或方法不对）。用 RENDERXHR 抓一次真实 XHR：
# 完整 URL、方法、请求头与 body，之后写 hotjob 适配器（一次能覆盖 4~5 家）。
RENDERXHR https://wecruit.hotjob.cn/SU60a6449a2f9d2430fdc11a19/pb/social.html (positionInfo|listPosition|listSearchTerm|api)
RENDERXHR https://yili.hotjob.cn/ (positionInfo|listPosition|listSearchTerm|api)
RENDERXHR https://goertek.hotjob.cn/SU65dd9ebd1c240e4b11c4f491/pb/index.html (positionInfo|listPosition|listSearchTerm|api)
# 第 43 轮：hotjob 详情页（JD 正文）。listPosition 已拿到列表（含 workPlaceStr 城市），
# 但列表没有 JD 正文；详情页是 SPA，需要抓它的 XHR 才能拿到 description/requirements。
RENDERXHR https://wecruit.hotjob.cn/SU60a6449a2f9d2430fdc11a19/pb/posDetail.html?postId=6ad9c667f0cfabf2b4002cea&postType=social (positionInfo|postDetail|detail|api)
RENDERXHR https://goertek.hotjob.cn/SU65dd9ebd1c240e4b11c4f491/pb/posDetail.html?postId=6a1536dae791100f0a0900b6&postType=campus (positionInfo|postDetail|detail|api)

# 第 44 轮：Moka 平台（安踏/吉利/恒瑞/华润置地/新城/旷视/新浪等在用）。
# 已知大疆的 Moka 返回加密串；需要确认其它租户是否也加密——抓一次校园页的 XHR。
RENDERXHR https://app.mokahr.com/campus-recruitment/geely/78436 (api|jobs|position|ats-apply)

# 第 45 轮：北森详情页（SPA）到底调哪个接口拿岗位详情——如果有 LocNames/城市字段，
# 校园岗城市覆盖就能从 29% 直接冲上去（北森占校园岗 95%）。
RENDERXHR https://jobtaikang.zhiye.com/campusxq?jobId=620767293 (api|Jobad|detail|Detail)

# 第 46 轮：中国建筑自研门户（recruit.cscec.com）——JS 里只有组件名，接口名要靠 XHR 抓。
RENDERXHR https://recruit.cscec.com/recruit (api|job|position)

# 第 47 轮：招商银行招聘门户（career.cmbchina.com，React 单页）——找岗位列表接口，
# 若是公开 JSON 就照 hotjob 写适配器（招行是 500 家里还没数据的大目标）。
RENDERXHR https://career.cmbchina.com/index.html (api|job|position)

# 第 48 轮：招行校招页面（SPA 客户端路由，试 /campus）——目标：拿到岗位列表 JSON 端点。
RENDERXHR https://career.cmbchina.com/campus (api|Recruitment|job|position)

# 第 49 轮：招行岗位列表路由 /positionlist/<guid>（从 chunk 2466 里挖到的），抓它的 XHR。
RENDERXHR https://career.cmbchina.com/positionlist/96574F8D-C7ED-4772-AE7C-BAC896D190C1 (api|Recruitment|position)

# 第 50 轮：招行 /campus/home —— 找「当前招聘季」的 recruitmentTypeId（getList 必须传它）。
RENDERXHR https://career.cmbchina.com/campus/home (api|campusRecruitment)
