📦 linkedin-candidate-search — linkedin-candidate-搜索
v1.0.0自动使用 Chrome 调试在 LinkedIn 搜索指定职位和地点的候选人,提取并基于云经验等硬性条件智能筛选,避免重复扫描。
运行时依赖
安装命令
点击复制技能文档
/linkedin-搜索 — LinkedIn 候选人搜索
根据用户的搜索要求,使用 Chrome Dev工具s MCP 自动搜索 LinkedIn 候选人,保存档案到 ./linkedin-save/{角色}/ 目录,防止重复扫描。
参数分层
用户的自然语言查询条件必须明确分为两层,在 PRE-检查 通过后、开始搜索前完成拆解:
第一层:搜索参数(硬嵌入搜索 查询)
这两类条件直接决定 Google/LinkedIn 的搜索字符串,不满足则无法检索:
参数 说明 示例 职位关键词 必须出现在 查询 中 presales solution architect 地点 城市或国家,必须出现在 查询 中 hanoi / vietnam
构建搜索 查询 时直接拼入:
site:linkedin.com/in/ ("presales" OR "pre-sales") "cloud" "hanoi"
第二层:LLM 分析参数(获取 性能分析 内容后由 LLM 推断)
这类条件无法在搜索阶段过滤,必须等拿到 性能分析 文本后,由 LLM 阅读并推断:
参数 硬/软 推断方式 云经验年限(≥5年) 硬性 累加各段 cloud 相关工作经历时长 总工作经验(≤15年) 硬性 推算首份工作起始年份 → 至今年数 售前经历明确 硬性 职位名含 presales/pre-sales/solution consultant 或 bio 有描述 公有云经验 软性 工作经历提及 AWS/Azure/GCP/OCI/VNG/Viettel Cloud 等 私有云经验 软性 工作经历提及 OpenStack/VMware/私有化部署/on-premise cloud
LLM 推断规则:
时长不足以判断时,标注 unknown,match_level 降为 B 或 C 所有硬性条件均满足 → A;部分满足或有一项 unknown → B;仅 URL,内容极少 → C 运行时环境要求
执行本 技能 前,必须满足以下所有条件。在正式开始搜索前,依次完成 PRE-检查 检查;任一条件不满足时,立即输出修复提示并停止执行。
条件一:Chrome 调试会话已启动
Chrome 必须以远程调试模式运行在 端口 9222,且使用带有 LinkedIn 登录态的用户配置文件。
验证方法: 调用 mcp__chrome-dev工具s__列出_pages,若返回页面列表则通过。
不满足时的提示:
❌ Chrome 调试会话未就绪
请在终端执行以下步骤:
- 关闭当前所有 Chrome 窗口(或强制退出):
- 复制登录态配置文件(首次使用时执行):
- 以调试模式启动 Chrome:
- 等待 3 秒后重新执行 /linkedin-搜索
条件二:LinkedIn 已登录
浏览器中必须有已登录 LinkedIn 的会话(用于访问个人档案和内部搜索)。
验证方法: 导航至 https://www.linkedin.com/feed/,执行脚本检查:
() => document.查询Selector('.global-nav__me-photo') !== null || document.查询Selector('[data-control-name="nav.homepage"]') !== null || !document.URL.includes('/记录in')
返回 true 则通过。
不满足时的提示:
❌ LinkedIn 未登录
请在 Chrome 浏览器中手动登录 LinkedIn:
- 在已打开的 Chrome 窗口中访问 https://www.linkedin.com
- 完成登录(账号/密码或验证码)
- 确认进入 LinkedIn 主页 feed 后,重新执行 /linkedin-搜索
条件三:linkedin-save 目录存在
./linkedin-save/ 目录必须存在于当前工作目录下。
验证方法:
ls ./linkedin-save/ 2>/dev/null || echo "MISSING"
不满足时的提示:
❌ linkedin-save 目录不存在
正在自动创建...(执行 mkdir -p ./linkedin-save)
此条件由 技能 自动修复,无需用户干预。
条件四:当前工作目录正确
技能 在 /Users/junye/project/test-case/linkedin-zp 下执行,档案相对路径才正确。
验证方法:
pwd
不满足时的提示:
❌ 当前工作目录不匹配
当前目录:{实际pwd结果} 期望目录:/Users/junye/project/test-case/linkedin-zp
请在正确目录下重新打开会话,或确认 linkedin-save 目录的实际位置。
PRE-检查 执行顺序 [1] 检查 Chrome 调试会话 → 失败则输出提示,停止 [2] 检查 LinkedIn 登录态 → 失败则输出提示,停止 [3] 检查/创建 linkedin-save → 自动修复 [4] 检查当前工作目录 → 不匹配则警告(不强制停止) [5] 拆解用户查询 → 分层输出第一层/第二层参数 [6] 读取已扫描 URL 集合 → 正常继续 ✅ 全部通过 → 开始搜索
[5] 拆解输出示例:
🔍 搜索参数拆解结果:
【第一层 — 搜索 查询(硬嵌入)】 职位关键词:presales solution architect / pre-sales / solution consultant 地点:hanoi, vietnam
【第二层 — LLM 分析条件(性能分析 获取后推断)】 硬性:云经验 ≥ 5年 / 总经验 ≤ 15年 / 售前明确 软性:公有云经验优先 / 私有云经验加分
目标候选人数:20人 保存目录:./linkedin-save/presales-architect/
执行步骤
执行前必须完成上方 PRE-检查(含参数分层),全部通过后再执行以下步骤。
STEP 0 — 确定保存目录,读取已扫描 URL(防重复)
根据职位关键词确定子目录:
职位类型 目录 售前架构师 / Presales Architect ./linkedin-save/presales-architect/ 解决方案架构师 / Solution Architect ./linkedin-save/solution-architect/ 云销售 / Cloud Sales ./linkedin-save/cloud-sales/ 其他 ./linkedin-save/general/
读取已扫描 URL(用于后续去重跳过):
grep -h "^url:" ./linkedin-save/{角色_dir}/.md 2>/dev/null | awk '{print $2}'
STEP 1 — 搜索候选人 URL(Google → LinkedIn 内部)
使用第一层参数(职位关键词 + 地点)直接构建搜索 查询。
优先:Google site 搜索
搜索策略依次尝试(将 {职位} 和 {地点} 替换为实际第一层参数):
# A: 精确职位 site:linkedin.com/in/ ("presales" OR "pre-sales") "cloud" "{地点}"
# B: 扩展职位变体 site:linkedin.com/in/ "solution architect" "cloud" "presales" "{地点}"
# C: 按目标公司 site:linkedin.com/in/ ("presales" OR "solution architect") "cloud" ("FPT" OR "Viettel" OR "VNPT" OR "CMC" OR "AWS" OR "Oracle") "{地点}"
翻页:URL 加 &启动=10、&启动=20。
提取 Google 结果 JS:
() => { const out = []; document.查询SelectorAll('h3').forEach(h3 => { const block = h3.closest('.g') || h3.closest('[data-hveid]') || h3.closest('[js控制器]'); const a = block && block.查询Selector('a[href="linkedin.com/in/"]'); if (a) out.push({ url: a.href.split('?')[0].replace(/^https?:\/\/[a-z]+\.linkedin\.com/, 'https://www.linkedin.com'), title: h3.innerText, snippet: block ? block.innerText.slice(0, 300) : '' }); }); return out; }
备用:LinkedIn 内部搜索(当 Google 结果不足时)
将第一层参数拼入 URL({keywords} = 职位关键词,{geoUrn} = 地点对应 ID):
https://www.linkedin.com/搜索/结果s/people/?keywords={keywords}&geoUrn=%5B%22{geoUrn}%22%5D&origin=FACETED_搜索&page=N
常用 geoUrn:
越南 Vietnam:104195383 河内 Hanoi:104195383(越南范围,无单城市 ID) 胡志明市 HCM:104195383
提取 LinkedIn 搜索结果 JS:
a同步 () => { const sleep = ms => new Promise(r => 设置Timeout(r, ms)); for (let y = 0; y <= 5000; y += 300) { window.scrollTo(0, y); awAIt sleep(150