- 硬性预筛门槛: 外贸经验必须(仅工作经历匹配), 培养类拦截, 毕业2020-2026, 年龄<=35 - 七维评分+动态阈值+打招呼纪律 - Hermes每日自动化: daily-runner(09:30-18:00)/daily-report/enforce-cutoff/stop-tasks - v10.4: 每累计200人自动刷新页面 - 修正: CDP端口9222(反向隧道), 通知只发私聊(防串台), hr2任务禁用 - WSL端: cdp-tunnel.sh 浏览器工人守护
11 KiB
Executable File
Windows 远程抓取环境配置
连接方式
| 网络 | 地址 | 备注 |
|---|---|---|
| 外网(当前) | sshpass -p 'xxx' ssh -p 7022 sshadmin@8.152.213.143 |
通过内网穿透NAT端口转发,当前唯一可用 |
| 内网 | sshadmin@192.168.100.176 |
Windows内网IP,外部不可达 |
~~sshadmin@192.168.50.99~~ |
已失效(2026-06-22 迁移后) |
SSH 使用 sshpass 密码认证(无密钥认证)。~/.ssh/config 中配置了 Host windows-hr 别名。
环境状态(截至 2025-05-20)
- 环境状态(截至 2025-05-20)
- Chrome: ✅ 已安装(
C:\Program Files\Google\Chrome\Application\chrome.exe) - Node.js: ✅ v22.18.0 + npm 10.9.3(MSI 静默安装)
- Playwright: ✅ playwright-core(
npm install playwright-core) - better-sqlite3: ✅(
npm install better-sqlite3) - 工作目录:
C:\recruitment\ - 数据库路径:
C:\recruitment\recruitment.db(从 Linux SCP 同步) - 脚本路径:
C:\recruitment\zhaopin-scrape.js(跨平台,通过RECRUITMENT_DB环境变量指定数据库路径)
已完成的部署步骤
# 1. 安装 Node.js(MSI 静默安装)
# 下载地址:https://nodejs.org/dist/v22.18.0/node-v22.18.0-x64.msi
msiexec /i node-v22.18.0-x64.msi /quiet /norestart
# 2. 创建工作目录
mkdir C:\recruitment
cd C:\recruitment
npm init -y
# 3. 安装依赖
npm install playwright-core better-sqlite3
# 4. 部署数据库(从 Linux SCP)
# Linux 端:scp ~/.hermes/data/recruitment/recruitment.db sshadmin@192.168.50.99:C:/recruitment/
# 5. 部署脚本(注意跨平台路径处理)
# 脚本通过 process.env.RECRUITMENT_DB 获取数据库路径
# Windows 端设置:set RECRUITMENT_DB=C:\recruitment\recruitment.db
✅ 已解决:SSH 会话隔离导致 CDP 端口不可达
现象
Chrome 通过 SSH 会话以 --remote-debugging-port=9222 启动后:
netstat -ano | findstr 9222显示端口 LISTENING ✅curl http://127.0.0.1:9222/json/version连接失败 ❌
根因
Windows Session 隔离 — SSH 会话和 Chrome 进程运行在不同的 Windows 会话中,网络命名空间不共享。
✅ 已验证的解决方案:RDP + SSH 端口转发
实际使用的工作流程(已验证通过):
- 用户 RDP 登录 Windows 桌面
- 在 Windows 桌面用快捷方式启动 Chrome(调试模式 + 独立 user-data-dir)
- Linux 端建立 SSH 端口隧道:
ssh -N -L 9223:127.0.0.1:9222 sshadmin@192.168.50.99 - 脚本在 Linux 上运行,通过
CDP_PORT=9223环境变量连接隧道端口 - 数据直接写入 Linux 本地 SQLite 数据库,无需同步
关键细节:
- 隧道端口用 9223 避免和 Linux 本地 9222 冲突
- Chrome 必须用
--user-data-dir指定独立目录(默认目录被锁定,不能直接用) - SSH 隧道必须保持连接,断开就失效
headless模式下 CDP 端口可达,但推荐用桌面模式(用户可可视监控)
❌ 已验证无效的方案
| 方案 | 结果 |
|---|---|
SSH 会话内 start "" "chrome.exe" --remote-debugging-port=9222 |
进程不启动(session 隔离) |
SSH 会话内 powershell Start-Process "chrome.exe" -ArgumentList ... |
进程不启动(session 隔离) |
SSH 会话内直接执行 chrome.exe --remote-debugging-port=9222 |
端口 LISTENING 但不可达 |
curl http://127.0.0.1:9222/json/version(SSH 会话内) |
连接失败 |
--remote-allow-origins=* |
无关,这是 CORS 配置 |
✅ 推荐:Windows 计划任务远程启动(2026-06-02 验证)
Windows 上已配置两个计划任务,可通过 SSH 远程启动浏览器(绕过 session 隔离):
# 启动 Chrome Debug(hr1,CDP 9222)
sshpass -p 'xxx' ssh -p 7022 sshadmin@8.152.213.143 "schtasks /run /TN \"ChromeDebug\""
# 启动 Edge Debug(hr2,CDP 9224)
sshpass -p 'xxx' ssh -p 7022 sshadmin@8.152.213.143 "schtasks /run /TN \"LaunchEdgeDebug\""
命令:
| 计划任务名 | 启动内容 |
|---|---|
ChromeDebug |
"C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222 |
LaunchEdgeDebug |
"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" --remote-debugging-port=9224 --user-data-dir=C:\temp\edge-debug |
原理: 计划任务在桌面 session(Session 1)中执行,与 RDP 登录同 session,所以 GUI 进程能正常启动且 CDP 端口可达。start 和 Start-Process 通过 SSH(Session 0)执行,进程要么不启动要么 CDP 不可达。
验证步骤(Edge 启动后需 ~6 秒才能 CDP 就绪):
sleep 6
ssh sshadmin@192.168.50.99 "curl -s --connect-timeout 5 http://127.0.0.1:9224/json/version"
# 应返回 {"Browser":"Edg/148.0.3967.96",...,"webSocketDebuggerUrl":"ws://..."}
Edge 启动后默认只打开空白 newtab 页,需要通过 CDP 导航到推荐页或用户在桌面手动操作。
Edge 启动方式(双账号 hr2)
安装路径
C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe
⚠️ Windows 用户目录实际路径(2026-06-26 确认)
通过 SSH echo %USERPROFILE% 确认实际用户目录为 C:\Users\sshadmin.WIN-3NKO8I5R9IJ(不是 C:\Users\sshadmin)。
- Chrome user-data-dir 应检查是否也需要更新(当前配置为
C:\temp\chrome-debug) - Edge user-data-dir 需用完整路径:
C:\Users\sshadmin.WIN-3NKO8I5R9IJ\AppData\Local\Microsoft\Edge\UserData-hr2 - 路径中避免空格(用
UserData-hr2不用User Data hr2),PowerShellStart-Process -ArgumentList解析含空格路径时可能出错
远程启动(推荐:schtasks)
# 通过 SSH 用计划任务启动(绕过 session 隔离)
sshpass -p 'xxx' ssh -p 7022 sshadmin@8.152.213.143 "schtasks /run /TN \"LaunchEdgeDebug\""
sleep 6 # Edge 启动较慢
⚠️ 计划任务 LaunchEdgeDebug 的 user-data-dir 可能需要更新: 当前配置为 C:\temp\edge-debug,需在 Windows 上检查该目录是否还存在,必要时更新为 C:\Users\sshadmin.WIN-3NKO8I5R9IJ\AppData\Local\Microsoft\Edge\UserData-hr2。
❌ SSH 远程启动 Edge(已确认无效,pitfalls #74)
通过 SSH 用 powershell Start-Process 或 cmd /c start 启动 Edge:
- 进程可能启动(
tasklist可见 msedge.exe) - 端口可能短暂 LISTENING
- 但 CDP 端口不可达(curl 返回空或连接失败)
- 端口 LISTENING 后会自动释放(Edge 在 Session 0 中运行异常)
- 即使是
powershell Start-Process也会失败 — 2026-06-26 实测确认
根因: SSH 登录在 Session 0(services session),Edge 启动在 Session 0 而非桌面 Session 1。GUI 进程在 Session 0 中 CDP 端口不稳定,会短暂监听后释放。
唯一可靠远程方式:schtasks /run(计划任务在桌面 session 执行)。
桌面快捷方式(备选)
⚠️ 2026-06-02 发现:桌面无 Edge Debug.lnk 快捷方式,只有 Chrome Debug.lnk。计划任务
LaunchEdgeDebug是唯一远程启动方式。如需创建快捷方式:
$WshShell = New-Object -ComObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("C:\Users\Administrator\Desktop\Edge Debug.lnk")
$Shortcut.TargetPath = "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
$Shortcut.Arguments = "--remote-debugging-port=9224 --user-data-dir=C:\temp\edge-debug"
$Shortcut.Save()
⚠️ Edge 同样受 Windows Session 隔离限制
通过 SSH 会话远程 Start-Process 启动的 Edge,CDP 端口 9224 虽然显示 LISTENING 但不可达,和 Chrome 完全相同的问题。必须通过计划任务或桌面快捷方式启动。详见上方"已验证无效方案"章节。
验证 CDP 连通性
# Linux 端,通过隧道验证
curl -s --connect-timeout 5 http://127.0.0.1:9225/json/version
# 应返回 JSON,含 Browser 字段为 "Microsoft Edge/..."
Chrome 启动方式
方式1:桌面快捷方式(推荐,已验证)
在 Windows 桌面创建快捷方式,用户双击启动:
# 通过 SSH 创建桌面快捷方式(一次性)
$WshShell = New-Object -ComObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut('C:\Users\Administrator\Desktop\Chrome Debug.lnk')
$Shortcut.TargetPath = 'C:\Program Files\Google\Chrome\Application\chrome.exe'
$Shortcut.Arguments = '--remote-debugging-port=9222 --user-data-dir=C:\temp\chrome-debug'
$Shortcut.Save()
⚠️ user-data-dir 必须用独立目录: Chrome 默认的 User Data 目录被已运行的 Chrome 实例锁定,直接使用会报错。必须先复制一份:
# 首次使用:复制默认 Chrome 配置(保留登录态和 Cookie)
robocopy "C:\Users\Administrator\AppData\Local\Google\Chrome\User Data" "C:\temp\chrome-debug" /E
方式2:SSH 命令行启动
# headless 模式(SSH 会话内 CDP 端口可达,但用户看不到浏览器)
& "C:\Program Files\Google\Chrome\Application\chrome.exe" --headless=new --remote-debugging-port=9222 --user-data-dir=C:\temp\chrome-debug
Linux 端操作
# 1. 建立 SSH 端口隧道(后台运行,保持连接)
ssh -N -L 9223:127.0.0.1:9222 sshadmin@192.168.50.99 &
# 2. 验证 CDP 连接
curl -s http://localhost:9223/json/version
# 3. 运行抓取脚本(通过环境变量指定端口)
cd /home/kt/scripts && CDP_PORT=9223 node zhaopin-scrape.js 20
数据存储
当前方案:脚本在 Linux 运行,数据直接写入 Linux 本地数据库,无需同步。
- 数据库路径:
/home/kt/.hermes/data/recruitment/recruitment.db - Windows 上不需要维护数据库副本
- 脚本通过
RECRUITMENT_DB环境变量自动检测系统并使用对应路径(Linux 默认,Windows 通过环境变量覆盖)
网络环境限制(重要)
⚠️ Windows 机器无法插网线(用户确认 2026-06-01),WiFi 是唯一网络方式。
| 项目 | 值 |
|---|---|
| WiFi 网卡 | Qualcomm QCA9565 802.11b/g/n |
| 连接 AP | HUAWEI-2.4G-HHVT (2.4GHz, 频道1) |
| 信号强度 | ~34% |
| 链路速度 | 72.2 Mbps |
| 以太网口 | Realtek PCIe GbE,状态 Disconnected(不可用) |
影响: 2.4GHz WiFi 信号弱 + 干扰大 → SSH 隧道间歇性断连。物理层无法优化。
应对措施(三层防御):
- SSH 双向保活(ServerAliveInterval=15 + ClientAliveInterval=30)
ssh-tunnel-watchdog.sh隧道守护(每10秒检测,断了自动重建)batch-runner.js内置waitForCdpRecovery()(CDP断开等5分钟恢复,不直接停止)
注意事项
- Windows SSH 服务器是 OpenSSH for Windows,部分 Linux 命令不可用
- 路径分隔符是
\\,脚本中注意跨平台兼容 - PowerShell 和 CMD 行为不同,脚本中优先用 Node.js API 而非 shell 命令
- Windows 防火墙可能阻止 CDP 端口(9222),需确认放行
- SSH 端口隧道的本地端口用 9223(避免和 Linux 本地 9222 冲突)
- Chrome
--user-data-dir必须是独立目录,默认目录被锁定 - SSH 隧道必须保持连接,断开后脚本无法连接 Chrome
- Windows 端 PowerShell 转义引号复杂,建议通过
powershell -Command "..."执行 - 脚本通过
CDP_PORT环境变量指定 CDP 端口,默认 9222