DeepSeek Harness 插件:dsh-plugin-cdp

DeepSeek Harness(DSH)的插件机制允许开发者通过特定接口扩展运行器能力。dsh-plugin-cdp 是一款基于 Chrome DevTools Protocol(CDP)的插件,旨在解决使用浏览器扩展进行自动化时可能遇到的标签页清空、借用用户标签页失效以及成功弹窗不可信等问题。它通过驱动一个受控的 Chrome 实例,提供了一套零运行时依赖(基于 Node ≥ 22 内置模块)的自动化方案。

核心能力

该插件主要提供以下四个核心能力:

  1. CDP 驱动受控实例:不依赖浏览器扩展,直接通过 CDP 协议与 Chrome 通信,避免被目标网站反制。
  2. 弹窗收集规则:插件本身不携带任何预设规则。首次使用时,会通过 DSH 内置的 ask_user_question 弹窗收集信息,包括岗位方向、工作地点、薪资下限、投递平台、浏览器选择及排除规则。收集到的答案落盘后不再重复询问。
  3. 纯文本可视化:提供基于 Unicode 字符画的薪资分布、地点条形图、平台占比及投递时间线等可视化报告。不依赖外部图表库,中文按双宽计算以防止表格错位。
  4. 无停机热替换:当规则变更时,采用“先起新进程、再退旧进程”的策略。新旧进程在重叠期内共享一份 append-only(仅追加)的状态记录,确保任务不断档。

工具列表

插件提供 15 个工具以支持自动化流程:

工具名 作用
cdp_status 查看受控 Chrome 的状态、端口及标签页信息
cdp_navigate 导航至指定 URL 并等待加载完成
cdp_eval 在标签页上下文中执行 JS 代码并返回 JSON
cdp_read 读取当前标签页的 URL、标题或可见文本
cdp_screenshot 将当前标签页截图并保存到本地文件
cdp_new_tab / cdp_use_tab 创建新标签页或切换到指定标签页
cdp_apply_verified 带校验的操作:等待详情面板稳定、校验薪资一致性,防止误点
cdp_prefs 读取或写入浏览器偏好设置(含规则问卷)
cdp_browser_info 报告实际使用的浏览器及可执行文件是否存在
cdp_jobs_report 生成岗位/薪资/地点的文本可视化报告
cdp_jobs_data 获取原始 JSON 数据
cdp_runner_status 查看运行器状态,包含“规则已变更但未生效”的提示
cdp_runner_reload 同步规则并执行热替换
cdp_runner_stop 停止运行器

安装与配置

在项目目录下执行以下命令安装插件:

npm i dsh-plugin-cdp

安装后,需要在 DSH 的插件配置中引入该插件:

- id: cdp
  name: "dsh-plugin-cdp"
  config:
    port: 9222

配置项说明

在 YAML 配置中,以下字段为必填或常用项:

  • chromePath:Chrome 可执行文件路径,留空则自动探测。
  • userDataDir:受控实例使用的独立用户目录。注意:由于不复用日常浏览器的配置,你需要在此目录中单独登录目标站点。
  • windowSize:浏览器窗口大小,格式为 宽,高。
  • defaultTimeoutMs:单条 CDP 命令的超时时间。
  • loadEventMs:等待页面加载事件的最大时长。
  • settleMs:导航后额外的稳定等待时间。
  • prefsPath:偏好设置(含规则问卷)的落盘路径。
  • stateDir:运行器状态目录。

运行与热替换流程

在仓库目录下,可以使用以下命令进行自检和测试:

node run-all-tests.mjs
node --test lib/jobs.test.mjs
node --test lib/report.test.mjs

热替换机制

插件支持在不中断服务的情况下更新规则。流程如下:

  1. 变更规则:修改规则配置,触发指纹变化。
  2. 启动新进程:启动新一代运行器进程,与老进程并存。
  3. 心跳验证:等待新一代进程输出心跳信号,证明其正常运行。
  4. 退位:老进程退出,新一代接管。

若新一代进程在就绪窗口内未输出心跳,系统将保留老进程继续运行,不会终止任务。

注意事项

  1. 输出字段严格校验:返回值必须与 output.schema 逐一对应,且 additionalProperties: false。多一个字段都会被宿主拒绝。
  2. 运行器默认心跳模式:未配置命令时,运行器不执行实际操作,仅维持心跳。这是为了验证链路通断。
  3. 状态存储方式:热替换依赖 append-only 的状态存储。如果状态是整份重写,重叠期间会互相覆盖,导致更新丢失。
  4. 结果验证:页面弹出的“成功”对话框不等于操作已记录。请务必到目标站点的记录页进行人工复核。

总结

dsh-plugin-cdp 适合需要在 DSH 环境中通过 CDP 协议进行高可控性浏览器自动化的场景。它通过强制可验证的操作流程和零依赖设计,为开发者提供了一个稳定的自动化通道。完整的文档与源码可参考 GitHub 仓库。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜