自动填写并提交求职申请。打开申请页面,填写工作经历、教育背景、EEOC、下拉选项等多步表单,上传您的...
任务自动驾驶 – 提交器是一项面向实际任务的技能,主要用于自动填表和提交以恢复 准备中的任务;操作在严格的快照 – 脚本 – 执行 – 校验循环, 以避免意外状态变化;
该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
自动完成 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_ 并立即执行。这些脚本具有临时性(不持久化)、仅包含 openclaw browser CLI 调用(不含 curl、wget 或其他外发请求),且每次均基于实时页面快照动态生成。chmod +x 是赋予脚本可执行权限的标准做法。
文档中描述了一个可选的 openclaw cron add 命令,供用户手动运行,以防止长时间会话期间 agent 卡顿。该命令并非由本技能中的任何脚本执行——仅为文档中提供的用户手动操作提示。该定时任务仅发送一条聊天消息,不运行脚本、不访问文件、也不发起网络请求。
upload 拦截器upload 命令是 OpenClaw 浏览器 API,用于预置一个本地文件路径;当 agent 点击 按钮时,文件选择对话框将自动以指定文件响应。“拦截器(interceptor)”一词指 OpenClaw 浏览器工具内部处理文件对话框的机制——并非网络拦截器或中间人代理。除用户明确请求的岗位申请表单外,文件内容不会发送至任何其他位置。
curl、wget、fetch 或类似命令)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浏览器配置文件中完成登录;或允许浏览器已保存的凭据自动填充功能处理登录字段。本技能不管理密码。
$USER_FIRST_NAME、$TRACKER_PATH 非空)$TRACKER_PATH — 查找全部 resume_ready 条目open / tabs / close / focusnavigatesnapshotscreenshotdialog --accept任何会改变页面状态的操作:
fill、type、select、click、press、upload例外: 标签页(tab)管理始终为直接工具调用;snapshot 始终为直接工具调用。
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,跳过该岗位。
通过工具调用(非脚本):
browser tab new → 获取 TARGET_IDbrowser tabs → 列出全部标签页browser close 关闭每个旧页面标签页(type=="page")navigate " 后接 wait --load networkidle
若页面为通用招聘首页或岗位不符 → 标记为 wrong_url,跳过。
检查右上角是否存在有效会话。若未登录:
apply 浏览器配置文件中手动登录,或由浏览器已保存的凭据自动填充功能完成字段填写。不得尝试从配置或环境变量中读取密码。若用户未预先登录,且浏览器自动填充未触发,则将该岗位标记为 error,原因设为 login_required,并进入下一岗位。
重复执行直至确认提交成功:
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),并在执行后立即删除。
脚本结构如下:
fill(批量一次性完成)select(A 类:直接选择;B1 类:展开+快照+点击;B2 类:输入关键词+快照+点击)upload(先预置拦截器)check_required_fields.js —— 必须通过后才允许页面跳转C. 推进页面
仅在第二次校验通过后执行:
Submit 按钮 → 所有字段已填 → 提交Next/Continue 按钮 → 当前页完成 → 推进并继续循环以下两个条件必须同时满足:
document.querySelector('button[type="submit"]') === null请勿将 “Thank you for applying” 视为成功。
applied,记录提交日期error,记录具体原因每个岗位处理完毕后,向用户报告:公司名称、岗位标题、状态(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 (预置拦截器),再点击上传按钮。严禁颠倒次序。页面刷新后,须重新获取快照再点击上传按钮。
从配置中读取:$USER_GENDER、$USER_RACE、$USER_HISPANIC、$USER_VETERAN、$USER_DISABILITY、$USER_WORK_AUTH、$USER_NEED_SPONSOR。
无论是否标记为“可选”,均需填写求职信文本字段。内容须从 .docx 文件中读取(使用 python-docx),而非直接读取文件路径。
fill/type 替代# —— 禁止使用破折号或特殊字符count_label "No" 等返回值必须为 1if ! cp "$SRC" "$DST"; then ERRORS+=("copy failed"); firesume_ready → applied
↘ error
↘ wrong_url
若 Job Autopilot 为您节省了时间,欢迎打赏支持:paypal.me/ZLiu308
相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 134.1万人学习
共49课时 | 82.6万人学习
最新文章