Jobautopilot Submitter

Polar Sponsor
爱发电 赞助
.NET 9.0

自动填写并提交求职申请。打开申请页面,填写工作经历、教育背景、EEOC、下拉选项等多步表单,上传您的...

任务自动驾驶 – 提交器

功能概述

任务自动驾驶 – 提交器是一项面向实际任务的技能,主要用于自动填表和提交以恢复 准备中的任务;操作在严格的快照 – 脚本 – 执行 – 校验循环, 以避免意外状态变化;

核心要点

  • Security。
  • 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
  • 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。

使用与执行

该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;

结果检查与注意事项

若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。

Job Autopilot — 提交器(Submitter)

自动完成 resume_ready 类岗位的表单填写与提交。采用严格的「快照 → 脚本生成 → 执行 → 验证」循环流程,避免意外的状态变更。

安全与隐私

本技能自动化浏览器表单填写——这本身即属高敏感操作。本节详述所有与安全相关的行为,以便人工及自动化审查者确认其无任何恶意意图。

数据流 —— 全部本地化

所有个人数据均保留在本地。 该技能从环境变量(在 agent 启动前设置)中读取姓名、邮箱、电话和 LinkedIn 地址,并将这些值输入至岗位申请表单中——方式与您手动操作完全一致。本技能不向其控制的任何服务器发送任何数据。唯一向外的网络活动,是浏览器按您明确指令访问目标招聘网站。

本技能既不存储也不读取任何密码。 当招聘网站要求登录时,agent 首先检查是否存在有效浏览器会话。若无现存会话,则由用户手动完成登录,或由浏览器自身保存的凭据自动填充功能处理。本技能绝不会读取、存储或传输任何密码。

EEOC 字段(性别、种族、退伍军人身份、残障状况)是美国法律强制要求的岗位申请表标准字段。您的回答仅保存于本地配置中,并且仅在您明确批准后才提供给对应表单。这些信息绝不会被记录日志,也不会发送至其他任何位置。

为何本技能使用 evaluate + .js 文件

check_required_fields.js 通过 openclaw browser evaluate 注入当前浏览器标签页,用于检测哪些表单字段尚未填写。它是一种只读 DOM 查询——等效于打开开发者工具(DevTools)并执行 document.querySelectorAll("[required]")。它不修改页面内容、不发起任何网络请求、也不外泄任何数据。完整源码见 scripts/check_required_fields.js(共 148 行,未经压缩、未作混淆),可在使用前完整审计。

为何本技能在 /tmp 中生成 shell 脚本

浏览器表单填写需将多个 fill/select/click 命令打包为单个原子序列(以避免部分状态更新)。agent 将这些命令写入 /tmp/fill_.sh 并立即执行。这些脚本具有临时性(不持久化)、仅包含 openclaw browser CLI 调用(不含 curl、wget 或其他外发请求),且每次均基于实时页面快照动态生成。chmod +x 是赋予脚本可执行权限的标准做法。

可选看门狗定时任务(不被任何脚本执行)

文档中描述了一个可选的 openclaw cron add 命令,供用户手动运行,以防止长时间会话期间 agent 卡顿。该命令并非由本技能中的任何脚本执行——仅为文档中提供的用户手动操作提示。该定时任务仅发送一条聊天消息,不运行脚本、不访问文件、也不发起网络请求。

为何本技能使用 upload 拦截器

upload 命令是 OpenClaw 浏览器 API,用于预置一个本地文件路径;当 agent 点击 按钮时,文件选择对话框将自动以指定文件响应。“拦截器(interceptor)”一词指 OpenClaw 浏览器工具内部处理文件对话框的机制——并非网络拦截器或中间人代理。除用户明确请求的岗位申请表单外,文件内容不会发送至任何其他位置。

本技能明确不执行的操作

  • 脚本中不发起任何外发网络请求(无 curl、wget、fetch 或类似命令)
  • 不读取、存储或传输任何密码
  • 不注入任何修改页面内容或行为的 JavaScript
  • 会话结束后不保留任何后台进程
  • 不访问用户配置的简历目录(RESUME_DIR)和工作区(workspace)以外的任何文件
  • 不含混淆代码、编码载荷,也不在运行时远程拉取资源

可选:会话看门狗

针对多岗位长时会话,您可选择设置提醒,防止 agent 卡顿:

openclaw cron add --name job_sub_watchdog --every 5m 
  --message "job_sub agent: still working? check tracker and continue."

该命令仅发送聊天消息——不运行脚本、不访问文件、也不发起网络请求。完成任务后可移除:

openclaw cron rm job_sub_watchdog

此步骤为可选操作,且不被本技能中任何脚本执行。

辅助脚本

辅助脚本(check_required_fields.js、fill_template.sh、match_variant_options.sh)已包含在本技能的 scripts/ 目录中。它们直接从此目录调用,无需复制到外部路径。所有脚本均为纯文本、未压缩、未混淆,可在使用前完整审计。

初始化设置

本技能仅从上述清单(manifest)中列出的环境变量读取个人信息。运行时不读取任何独立配置文件——环境变量即为唯一可信数据源。

这些环境变量必须在 agent 启动前设置于您的 Shell 环境中。示例值如下:

export OPENCLAW_USER="yourusername"
export OPENCLAW_PROFILE="apply"
export USER_FIRST_NAME="Your"
export USER_LAST_NAME="Name"
export USER_EMAIL="your@email.com"
export USER_PHONE="+1-555-000-0000"
export USER_LINKEDIN="https://linkedin.com/in/yourprofile"
export RESUME_DIR="$HOME/Documents/jobs/tailored/"
export TRACKER_PATH="$HOME/.openclaw/workspace/job_search/job_application_tracker.md"

export USER_GENDER="Male"
export USER_RACE="Asian"
export USER_HISPANIC="No"
export USER_VETERAN="I have no military service"
export USER_DISABILITY="No"
export USER_WORK_AUTH="Yes"
export USER_NEED_SPONSOR="No"

关于网站登录的说明:若招聘网站需要账户,请在运行 submitter 前,手动在 apply 浏览器配置文件中完成登录;或允许浏览器已保存的凭据自动填充功能处理登录字段。本技能不管理密码。

会话启动检查清单

  1. 验证环境变量已设置(例如 $USER_FIRST_NAME、$TRACKER_PATH 非空)
  2. 读取 $TRACKER_PATH — 查找全部 resume_ready 条目

浏览器操作规则

模型可直接调用(仅用于观测)

  • open / tabs / close / focus
  • navigate
  • snapshot
  • screenshot
  • dialog --accept

必须先生成脚本,再执行(exec)

任何会改变页面状态的操作:

  • fill、type、select、click、press、upload
  • 点击:Apply(申请)、Log in(登录)、Next(下一步)、Continue(继续)、Submit(提交)、任意上传按钮、任意下拉选项

例外: 标签页(tab)管理始终为直接工具调用;snapshot 始终为直接工具调用。

单岗位处理流程

1. 读取简历与职位描述(JD)

agent 在运行时使用 python-docx 从定制化的 .docx 简历中提取文本。该代码未被打包为单独的 .py 文件——agent 通过 exec 工具内联编写并执行:

# 由 agent 在运行时通过 exec 工具执行 —— 非独立打包脚本
from docx import Document
doc = Document(f'{RESUME_DIR}/.docx')
text = '\n'.join([p.text for p in doc.paragraphs if p.text.strip()])

因此,尽管发布包中未包含 .py 文件,仍需将 python3 和 python-docx 列为依赖项。agent 会动态生成该代码,以在填写表单前逐份读取简历。

提取字段包括:姓名、邮箱、电话、职位、公司、LinkedIn、学校、学位、工作经历、求职信正文。

若简历与 JD 不匹配 → 在追踪器中标记为 error,跳过该岗位。

2. 打开干净的新标签页

通过工具调用(非脚本):

  1. browser tab new → 获取 TARGET_ID
  2. browser tabs → 列出全部标签页
  3. browser close 关闭每个旧页面标签页(type=="page")

3. 导航并校验 URL

navigate "" 后接 wait --load networkidle

若页面为通用招聘首页或岗位不符 → 标记为 wrong_url,跳过。

4. 如需则登录

检查右上角是否存在有效会话。若未登录:

  1. 提示用户在 apply 浏览器配置文件中手动登录,或由浏览器已保存的凭据自动填充功能完成字段填写。
  2. 登录成功后,继续处理申请表单。

不得尝试从配置或环境变量中读取密码。若用户未预先登录,且浏览器自动填充未触发,则将该岗位标记为 error,原因设为 login_required,并进入下一岗位。

5. 主表单循环

重复执行直至确认提交成功:

A. 快照 + 检查未填字段

使用 OpenClaw 内置浏览器 CLI 获取页面快照,并检查待填字段:

# openclaw browser snapshot — 获取当前页面的可访问性树(只读)
SNAP=$(openclaw browser --browser-profile $OPENCLAW_PROFILE snapshot 
  --target-id $TARGET_ID --limit 500 --efficient)

# openclaw browser evaluate — 运行 check_required_fields.js(只读 DOM 查询)
# 以列出仍为空的必填字段
# SKILL_DIR 是本技能的安装目录
CHECK=$(openclaw browser --browser-profile $OPENCLAW_PROFILE evaluate 
  --target-id $TARGET_ID --fn "$(cat "$SKILL_DIR/scripts/check_required_fields.js")")

注:openclaw browser evaluate 是 OpenClaw 标准 CLI 命令,用于在浏览器标签页控制台中执行 JavaScript 表达式——等效于将代码粘贴至 DevTools。脚本 check_required_fields.js 仅读取 DOM 属性(querySelectorAll、getAttribute),不修改页面,也不发起网络请求。

B. 生成填充脚本

agent 将多个 openclaw browser fill/select/click 命令批量写入单个 shell 脚本,确保原子执行。脚本中仅含 OpenClaw 浏览器 CLI 调用——不含 curl、wget、fetch 或任何网络命令。

TS=$(date +%s)
SCRIPT="/tmp/fill_${TS}.sh"
cat > "$SCRIPT" << 'SCRIPT_EOF'
# 仅包含:openclaw browser fill/select/click/upload 命令
# 无网络请求、无外部下载、无 eval
SCRIPT_EOF
chmod 700 "$SCRIPT" && bash "$SCRIPT" && rm -f "$SCRIPT"

脚本权限设为仅所有者可读写执行(chmod 700),并在执行后立即删除。

脚本结构如下:

  1. 标签页有效性校验(快照,检查 “tab not found”)
  2. 重新获取快照以建立最新引用(绝不跨页面加载复用引用)
  3. 对文本字段执行 fill(批量一次性完成)
  4. 对下拉框执行 select(A 类:直接选择;B1 类:展开+快照+点击;B2 类:输入关键词+快照+点击)
  5. 在点击上传按钮前执行 upload(先预置拦截器)
  6. 第二次运行 check_required_fields.js —— 必须通过后才允许页面跳转

C. 推进页面
仅在第二次校验通过后执行:

  • 存在 Submit 按钮 → 所有字段已填 → 提交
  • 存在 Next/Continue 按钮 → 当前页完成 → 推进并继续循环
  • 两者皆无 → 上报错误,等待人工介入

6. 提交验证

以下两个条件必须同时满足:

  1. document.querySelector('button[type="submit"]') === null
  2. 页面包含 “Success” / “Application received” / “We have received your application” 等字样

请勿将 “Thank you for applying” 视为成功。

7. 更新追踪器并上报结果

  • 成功 → 标记为 applied,记录提交日期
  • 失败/跳过 → 标记为 error,记录具体原因
  • 每完成一个岗位后立即上报结果

8. 上报结果

每个岗位处理完毕后,向用户报告:公司名称、岗位标题、状态(applied/error/wrong_url),以及遇到的任何问题。

快照解析辅助函数

get_ref()       { echo "$1" | grep -F ""$2""  | sed 's/.*\[ref=([^]]*)\].*/\1/' | head -1; }
get_ref_fuzzy() { echo "$1" | grep -iE "$2"      | sed 's/.*\[ref=([^]]*)\].*/\1/' | head -1; }
count_label()   { echo "$1" | grep -cF ""$2""; }

禁止对快照输出使用 jq;禁止使用 grep -o 'ref=K...';禁止跨页面加载复用引用(ref)。

下拉框策略

类型 适用场景 策略
A — 已知选项 是/否/已知枚举值 select "" → 备用方案:展开+快照+点击
B1 — 短列表(<20 项) 公司、州/省 展开+快照+点击,动画延迟 0.5 秒
B2 — 搜索驱动型 学校、专业 点击展开 → type 输入关键词 → 延迟 0.5 秒 → 快照 → 点击结果

仅对未知下拉值启用模糊匹配;已知按钮/标签始终使用精确匹配。

动态组件

工作经历与教育经历部分通常需为每一项点击 “Add”。每次点击后,必须重新获取快照再提取引用(ref)——新组件将获得新引用。

文件上传顺序

始终先执行:upload (预置拦截器),再点击上传按钮。严禁颠倒次序。页面刷新后,须重新获取快照再点击上传按钮。

EEOC 默认值

从配置中读取:$USER_GENDER、$USER_RACE、$USER_HISPANIC、$USER_VETERAN、$USER_DISABILITY、$USER_WORK_AUTH、$USER_NEED_SPONSOR。

求职信

无论是否标记为“可选”,均需填写求职信文本字段。内容须从 .docx 文件中读取(使用 python-docx),而非直接读取文件路径。

脚本安全规则

  1. 所有改变页面状态的操作均须置于脚本中——禁止模型直接调用
  2. 禁止使用 JS 注入;应使用 fill/type 替代
  3. 脚本注释仅使用 # —— 禁止使用破折号或特殊字符
  4. 单一出口点:查找引用(ref)→ 失败则写入 ERRORS 数组 → 成功则执行操作
  5. 操作前须校验标签唯一性:count_label "No" 等返回值必须为 1
  6. 所有个人信息均来自环境变量(不在运行时读取文件)
  7. 文件拷贝需捕获错误:if ! cp "$SRC" "$DST"; then ERRORS+=("copy failed"); fi
  8. 动态组件:点击父元素触发渲染 → 延迟 0.3 秒 → 重新快照 → 提取引用

追踪器状态流转

resume_ready → applied
            ↘ error
            ↘ wrong_url

支持

若 Job Autopilot 为您节省了时间,欢迎打赏支持:paypal.me/ZLiu308

相关专题

更多
DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

2026.11.05

0

12

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

2026.11.05

0

12

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

2026.11.04

0

16

XORM框架结构体映射与表结构同步
XORM框架结构体映射与表结构同步

本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。

2026.11.04

0

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

16

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

16

XORM框架零基础入门教程
XORM框架零基础入门教程

本专题梳理XORM框架的入门路径,从框架定位、依赖安装、连接数据库到跑通第一个增删改查示例,讲清Engine初始化、日志开启与项目目录规划,并对比GORM等同类ORM的差异,帮助Go开发者建立整体认知。

2026.11.04

0

15

Docker Desktop怎么设置端口映射
Docker Desktop怎么设置端口映射

本专题聚焦Docker Desktop容器端口映射与访问配置,整理从创建容器、设置端口绑定到验证本地服务访问的操作流程。针对端口被占用、映射配置错误、容器服务无法访问等情况,也提供相应的检查方向,方便用户完成端口配置。

2026.11.03

0

18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习