资讯动态

OpenCLI 脉脉(maimai)人才搜索适配器完全指南:复用浏览器登录态实现多维度候选人检索

发布时间:2026/9/19 14:11:59 来源:尧图企业网站定制
OpenCLI 脉脉maimai人才搜索适配器完全指南复用浏览器登录态实现多维度候选人检索【免费下载链接】OpenCLIMake Any Website into CLI Use your logged-in browser by AI agent.项目地址: https://gitcode.com/gh_mirrors/ope/OpenCLI本篇技术指南基于 OpenCLI 仓库中的 docs/adapters/browser/maimai.md 适配器文档结合其源码实现 clis/maimai/search-talents.js、clis/maimai/auth.js 与注册清单 cli-manifest.json 展开。读完本文你将掌握如何通过opencli maimai search-talents命令在终端中直接复用 Chrome 已登录的脉脉会话按公司、学校、地域、学历、工作年限、行业、院校层次等维度结构化检索脉脉人才库并将结果以表格或 JSON 形式输出供招聘流程、人才盘点或 AI Agent 下游处理使用。适配器概览模式、域名与命令清单脉脉适配器是 OpenCLI「把任意网站变成 CLI」理念下的一个典型实现属于 Browser浏览器会话复用模式目标域名为maimai.cn。它不依赖任何独立的账号密码或 API Token而是直接复用你本机 Chrome 中已登录的脉脉会话因此登录凭证始终留在浏览器内不会经手 CLI 进程。根据 cli-manifest.json 中的注册信息该适配器共注册三个命令命令访问级别说明opencli maimai loginwrite打开脉脉登录页并等待浏览器会话完成认证默认超时 300 秒opencli maimai search-talentsread在脉脉人才库中按关键词与多维结构化筛选条件检索候选人opencli maimai whoamiread显示当前已登录脉脉账号的 user_id、姓名与公司其中search-talents是文档的核心命令其余两个命令来自 clis/maimai/auth.js 中registerSiteAuthCommands的注册逻辑。你可以在适配器总览 docs/adapters/index.md 中看到所有 Browser 模式适配器的完整清单脉脉位于其中命令为search-talents。前置条件登录态、搜索页可达性与 Browser Bridge在运行任何脉脉命令之前需要满足三个前置条件对应原文档 Prerequisites 一节Chrome 正在运行且已登录maimai.cn。Browser 模式命令复用的是 Chrome 的真实登录会话未登录状态下执行搜索会直接报登录错误。登录后的浏览器能够正常打开https://maimai.cn/ent/talents/discover/search_v2。这是人才搜索页面的地址命令在执行时会首先goto到该页面等待网络空闲waitUntil: networkidle并停留 5 秒见 search-talents.js。如果该页面本身无法打开命令必然失败。已安装 Browser Bridge 扩展。Browser Bridge 是 OpenCLI 连接 Chrome 的桥梁CLI 进程通过 localhost 上的微守护进程与扩展建立 WebSocket 连接由扩展在网页上下文中执行 JavaScript。详细安装与验证步骤参见 Browser Bridge 设置指南安装后可通过opencli doctor检查扩展与守护进程的连通性。关于登录的自动化opencli maimai login会打开脉脉登录页并轮询等待认证完成whoami命令则可用于验证当前会话的登录身份。实际使用中只要 Chrome 里已经手动登录过脉脉即可直接执行search-talents无需每次重新登录。命令用法从简单关键词到组合筛选search-talents唯一必填参数是位置参数query搜索关键词其余全部为可选过滤项。原文档给出的五个示例完整继承如下并补充了参数说明# 基础用法按关键词搜索 opencli maimai search-talents Java # 按公司与城市收窄范围公司支持逗号分隔多值 opencli maimai search-talents 产品经理 --companies 阿里巴巴,字节跳动 --cities 北京市 # 按学校、学历、工作年限过滤 opencli maimai search-talents 算法 --schools 北京大学,清华大学 --degrees 3 --worktimes 3 # 优先展示近期活跃候选人且仅保留可直聊对象 opencli maimai search-talents 运营 --sortby 1 --is_direct_chat 1 # JSON 输出便于下游脚本 / LLM 处理 opencli maimai search-talents Java --size 10 -f json其中最后一个示例揭示了两个通用能力--size控制单页返回条数默认 20-f json切换输出格式。根据 快速上手文档所有内置命令统一支持-f table / json / yaml / md / csv五种输出格式默认是 rich 终端表格-f json非常适合接入 jq 或 AI Agent 做进一步结构化处理。关键过滤参数全解原文档列出了 11 个核心过滤参数下表在完整保留原文档取值语义的基础上结合 search-talents.js 中的参数定义补充了类型与默认值参数类型默认值取值与说明--positionsstr空按职位/头衔过滤如运营、Java 开发工程师--companiesstr空逗号分隔的当前或历史任职公司如百度、字节跳动阿里巴巴--schoolsstr空逗号分隔的学校名如北京大学、清华大学复旦大学--provincesstr空省份过滤如北京、上海--citiesstr空城市过滤如北京市、上海市--worktimesstr空工作年限档位11-3年、23-5年、35-10年、410年以上--degreesstr空学历档位1大专、2本科、3硕士、4博士、5MBA--professionsstr空行业代码01互联网、02金融、03电子、04通信源码注释中的示例值--is_211int0是否限 211 院校0不限、1仅 211--is_985int0是否限 985 院校0不限、1仅 985--sortbyint0排序方式0相关度、1活跃度、2工作年限、3学历--is_direct_chatint0是否仅保留可直聊候选人0不限、1仅可直聊此外还有两个分页参数--pageint默认 0与--sizeint默认 20。注意page从 0 开始计数即第一页是--page 0这与多数从 1 开始分页的网站不同容易踩坑。组合筛选实战示例将这些参数组合起来可以实现相当精细的候选人画像筛选。例如寻找北京地区、硕士及以上、3 年以上经验、曾任职字节跳动或阿里巴巴、毕业于 985 院校、近期活跃且可直聊的算法人才opencli maimai search-talents 算法 \ --companies 字节跳动,阿里巴巴 \ --cities 北京市 \ --degrees 3 \ --worktimes 3 \ --is_985 1 \ --sortby 1 \ --is_direct_chat 1 \ --size 20输出字段12 列结构化候选人画像命令的列定义同样来自源码注册search-talents.js共 12 列其映射逻辑如下见 search-talents.js列名来源与语义name候选人姓名job_title职位优先取item.position回退到job_titlecompany当前公司item.companyhistorical_companies历史任职公司从工作经历数组item.exp中提取并去重、剔除当前公司以/连接location地域格式为省份·城市work_year工作年限文本直接取item.work_time如11 年回退到worktimeschool学校取教育经历数组第一项item.edu[0]的school字段回退到hover.namedegree学历取sdegree回退到hover.school_levelactive_status活跃状态按active_state_v2→active_state_v1→active_state优先级取值age年龄tags技能/标签从tag_list或tags数组过滤空值后以,连接mutual_friends共同好友格式如3人 (张三, 李四, 王五)好友列表最多展示前 3 个无共同好友时为空特别说明historical_companies的处理源码中通过filter先剔除空值和当前公司再用indexOf做数组级去重search-talents.js。这意味着同一家公司出现在多段工作经历中时只输出一次便于直接作为候选人履历特征使用。底层实现原理一次完整的搜索是如何发生的深入 clis/maimai/search-talents.js 可以看到该命令并非简单抓取页面 DOM而是在已登录的浏览器上下文中直接调用脉脉的搜索 API其完整流程可以拆解为四个阶段1. 打开搜索页并生成会话标识命令先导航到https://maimai.cn/ent/talents/discover/search_v2等待networkidle并固定等待 5 秒确保页面会话环境就绪。随后在 Node 侧生成两个随机 UUID 风格的会话 IDsessionid与deletesessionidsearch-talents.js随请求体一起提交用于跟踪一次独立的搜索行为。2. 组装结构化请求体所有 CLI 参数被映射为 API 请求体requestBody.search的字段search-talents.js字段与参数一一对应包括query、page、size、worktimes、degrees、professions、schools、positions、sortby、is_direct_chat、cities、provinces、is_211、is_985以及固定值companyscope: 0和由--companies映射的allcompanies字段。3. 通过 CDP 直读 CSRF Token避免多余的页面往返脉脉的搜索 API 需要x-csrf-token请求头。源码采用了注释中明确标注的优化通过page.getCookies({ url: https://maimai.cn })直接从 Cookie StoreCDP 层读取csrftoken而不是先执行一次page.evaluate往返search-talents.js。只有在 Cookie 中取不到时才会回退到页面meta namecsrf-token标签search-talents.js。4. 浏览器上下文内发起 API 请求并做多层校验请求体与 CSRF Token 被注入浏览器上下文通过fetch以POST方式发送到https://maimai.cn/api/ent/discover/search?channelwwwdata_version3.0version1.0.0请求头包含content-type: text/plain;charsetUTF-8、referer指向搜索页、credentials: include以携带登录 Cookiesearch-talents.js。随后进行三层校验登录态校验HTTP 状态为 401/403或error_code 20002时抛出「需要登录请先在浏览器中访问 maimai.cn 并登录」业务码校验code不为 200 且不为 0 时抛出 API 返回的message或error结构校验响应缺失list/talent_list等数组字段时抛出CommandExecutionError(Maimai search API payload missing talent list)search-talents.js。只有当 API 显式返回空数组时才会抛出EmptyResultError未找到匹配 X 的候选人。源码注释特别强调缺字段代表 API 结构漂移只有显式空数组才是真正的空结果这种区分保证了错误的可诊断性search-talents.js。登录身份验证机制如何在不开 DevTools 的情况下确认登录登录态是整条命令链的根基。查看 clis/maimai/auth.js 可以发现一个精妙的实现脉脉会把已登录用户信息以userObj JSON.parse({...})的形式内联进页面脚本且该变量用let声明不会挂到window上全局userCardStr还被污染成了[object Object]常规的window.userObj探测是拿不到的。因此verifyMaimaiIdentity采用了一种针对性的探测脚本遍历页面所有script标签的文本用正则userObj\s*\s*JSON\.parse\((\{[\s\S]*?\})\)匹配内联 JSON 并解析出user.id、user.name、user.companyauth.js。由于该内联脚本只在已认证会话中被注入它的存在本身就等价于登录信号——这就是whoami命令与login轮询验证的实现基础。探测脚本区分四种结果auth未登录、httpHTTP 错误、exception脚本异常、ok已登录分别抛出不同的可诊断错误auth.js。测试与异常行为验证适配器自带单元测试 clis/maimai/search-talents.test.js用 vitest 的 mockpage对象验证了两个核心异常分支显式空结果API 返回{ code: 200, data: { list: [] } }时命令应抛出EmptyResultError结构漂移API 返回{ code: 200, data: { items: [] } }字段名不对时命令应抛出CommandExecutionError而不是静默返回空表。这两个用例直接对应上文提到的空数组 vs 缺字段的严格区分也为二次开发如扩展过滤维度提供了可参考的 mock 模式createPageMock模拟了goto/waitForTimeout/getCookies返回csrftoken/evaluate返回 API 载荷四个方法任何新增的 API 分支测试都可以复用。常见问题排查结合源码错误处理逻辑将原文档 Notes 一节的排查要点展开如下报需要登录命令在 401/403 或error_code 20002时判定为未登录。首先确认同一个 Chrome 配置文件能否直接手动打开人才搜索页https://maimai.cn/ent/talents/discover/search_v2——若手动打开也跳登录说明是浏览器会话本身未登录或已过期执行opencli maimai login重新认证后再试。报missing talent list说明 API 响应结构与适配器预期的list/talent_list字段不一致通常是脉脉服务端结构变更所致属于适配器需要跟随站点更新的信号。报未找到匹配这是正常的空结果分支说明筛选条件组合下确实没有候选人可放宽--worktimes、--degrees等档位参数后重试。分页错位--page是从 0 开始的翻页时使用--page 1才是第二页。-f json输出为空或无法解析确认当前终端环境已正确安装 Browser Bridgeopencli doctor自检且 Chrome 保持运行状态。小结opencli maimai search-talents展示了 OpenCLI「复用登录态 结构化输出」的核心思路无需管理密码、不消费任何 LLM Token、命令输出 schema 确定天然适合被脚本与 AI Agent 编排。如果你需要在招聘自动化、人才盘点、竞品团队分析等场景中程序化访问脉脉人才库从本文的 12 个过滤参数与 12 列输出字段出发即可组合出满足业务需要的候选人检索管道如需了解更底层的浏览器控制原语与适配器开发方式可进一步阅读 Browser Bridge 设置指南 与 快速上手文档。【免费下载链接】OpenCLIMake Any Website into CLI Use your logged-in browser by AI agent.项目地址: https://gitcode.com/gh_mirrors/ope/OpenCLI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价