ワンクリックで
web-form-fill
网络表单填报技能 — 从信息搜集到浏览器填报的完整工作流,确保框架受控组件正确写入、页面切换前暂存、最终提交由用户确认。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
网络表单填报技能 — 从信息搜集到浏览器填报的完整工作流,确保框架受控组件正确写入、页面切换前暂存、最终提交由用户确认。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
| name | web-form-fill |
| description | 网络表单填报技能 — 从信息搜集到浏览器填报的完整工作流,确保框架受控组件正确写入、页面切换前暂存、最终提交由用户确认。 |
| metadata | {"openclaw":{"emoji":"📝"}} |
面向在线表单填报场景:申报系统、比赛报名、补贴申请、信息登记等。核心原则:先看后填、模拟真人、切页必存、提交由人。
依赖技能:browser-guide(浏览器操作最佳实践)
打开浏览器后,先完整浏览整个表单,不要急着填。
form-fields-{项目简称}.md),保持与表单相同的页面/段落结构markdown 文件结构示例:
# XX大赛申报 — 字段清单
## 概要
- 项目名称 [必填] [text] [限50字]
- 行业分类 [必填] [级联下拉] 一级→二级
- 科技创新领域 [必填] [下拉单选]
- 参赛渠道 [必填] [下拉多选]
- 以投代评 [必填] [radio: 是/否]
- 服务需求 [多选] 最多3项
- 期望融资金额 [必填] [number] 万元
- 股权释放比例 [必填] [number] %
## 参赛项目情况
- 项目名称 [必填] [text] (概要中已填,此处联动)
- 前沿技术热点归属 [必填] [text] 最多5个关键词,逗号分隔
- 项目主要技术、产品及服务 [必填] [富文本] 2000字以内,可插入图片
- 项目产品市场分析及竞争优势 [必填] [富文本] 2000字以内
- 商业模式 [必填] [富文本] 1000字以内
## 企业基本信息表
...
## 附件
- 营业执照 [必填] [PDF/图片]
- ...
回到 markdown 文件,逐项填写准备好的内容:
问用户的典型场景:
信息齐全后,打开浏览器逐页填报。
核心原则:统一使用 type + slow 模拟人类逐字输入,对所有站点、所有输入框一视同仁。
唯一方法:locator.type(text, {delay: N})
type 通过 CDP 逐字符发送 keyDown → char → keyup 事件,与真人键盘输入完全一致delay 设置每字符间隔(毫秒),模拟人类打字节奏填写流程:
对每个文本字段:
1. scrollIntoView 确保在视口内
2. 点击聚焦
3. 清空已有内容(见下方清空方式)
4. locator.type("要填入的文本", {delay: 80})
5. 验证写入是否生效(见 3-C 节)
6. 如果验证失败:
a. 清空内容
b. 重新聚焦后重试一次 type
c. 仍然失败 → 记录该字段为"无法自动填写",继续下一个字段
为什么 type + slow 就够了:
| 场景 | type + slow 是否生效 | 原因 |
|---|---|---|
| 原生 input/textarea | ✅ | 逐字符 keyDown/char/keyup 走浏览器真实输入管线 |
| Vue/React v-model 受控组件 | ✅ | 框架监听 input 事件,type 触发的 keyDown → input 事件链完整 |
| Slate/wangEditor/Tiptap 编辑器 | ✅ | 逐字符 keyDown 会触发浏览器的 beforeinput 事件,Slate 监听的就是这个 |
| 有输入 mask 的字段 | ✅ | 逐字符输入让 mask 逻辑逐字处理,不会跳过格式化 |
| 防机器人检测的站点 | ✅ | slow delay 模拟真人节奏,不触发异常检测 |
禁止的方式:
innerHTML / textContent — 框架不感知,placeholder 不消失,暂存后内容丢失el.value = "xxx" 不发事件 — 框架完全无感知fill() — 一次性塞入整段文本,不触发逐字事件链,受控组件和 mask 字段容易出问题逐级尝试:
| 级别 | 方法 |
|---|---|
| A | 点击 select 打开下拉面板 → 点击目标选项 |
| B | 点击 select → 键盘方向键选择 → Enter 确认 |
| C | native setter 设值 + dispatchEvent('change') |
自定义下拉(非原生 <select>,如 Element Plus el-select、Ant Design Select):
Input.dispatchMouseEvent 点击目标选项逐级尝试:
| 级别 | 方法 |
|---|---|
| A | 点击日期输入框 → 在弹出的日历面板中逐年/月/日点击 |
| B | 点击日期输入框聚焦 → type 输入日期字符串 |
| C | native setter 设值 + dispatchEvent |
<input type="file"> 或上传按钮DOM.setFileInputFiles 设置文件路径Patchright 1.60+ 替代方案 — locator.drop():
对于支持拖拽上传的区域(上传 zone、拖放区域),可用 locator.drop() 模拟外部拖拽文件:
// 拖拽本地文件到上传区域
await page.locator('#dropzone').drop({
files: { name: 'report.pdf', mimeType: 'application/pdf', buffer: Buffer.from(fileBytes) },
});
// 拖拽剪贴板数据
await page.locator('#dropzone').drop({
data: {
'text/plain': '粘贴的文本内容',
'text/uri-list': 'https://example.com',
},
});
drop() 通过合成 dragenter → dragover → drop 事件 + DataTransfer 实现,跨浏览器兼容,无需依赖 <input type="file"> 的存在。适用于:
| 控件类型 | 验证方式 | 通过条件 |
|---|---|---|
| 普通 input | 检查 el.value 和 placeholder 可见性 | el.value 包含预期内容 且 placeholder 不可见 |
| contenteditable / Slate 编辑器 | 检查 editor.textContent.trim() 和 placeholder 元素 | textContent 包含预期内容 且 placeholder 元素 display: none。延迟 50ms 再验证 — Slate DOM 更新有延迟 |
| 下拉 select | 检查选中项文本 | 选中项文本与预期一致 |
| radio/checkbox | 检查 el.checked | 选中状态符合预期 |
验证失败的处理:
type切换页面/栏位前,必须执行:
如果当前页没有暂存按钮:
所有页面填写完成后:
原因:框架内部状态未更新。
解决:确保使用 type + slow 逐字输入(会触发完整事件链),而非直接操作 DOM。type 失败时重新聚焦重试。
原因:框架内部状态为空,暂存提交的是空值。
验证方法:暂存后,导航到其他页面再回来,检查字段是否仍有值。
原因:Slate 处理 beforeinput 后,文本已写入数据模型但 DOM 还没渲染完。
解决:验证前延迟 50ms+,等 Slate 微任务队列跑完再读 textContent。
对策:
[contenteditable="true"]),而非工具栏document.activeElement 是编辑器或其子节点对策:
对策:
type 的 delay 调大至 100-150ms,模拟真人打字节奏browser-guide 的 CAPTCHA 处理流程操作1. Runtime.evaluate: el.scrollIntoView({block:'center'})
2. Runtime.evaluate: el.getBoundingClientRect() → {x, y, width, height}
3. Input.dispatchMouseEvent: mousePressed at (x+width/2, y+height/2)
4. Input.dispatchMouseEvent: mouseReleased
1. 聚焦元素(见上)
2. Input.dispatchMouseEvent: mousePressed clickCount=3 (triple-click 全选)
3. Input.dispatchMouseEvent: mouseReleased clickCount=3
4. Input.dispatchKeyEvent: keyDown Backspace
5. Input.dispatchKeyEvent: keyUp Backspace
6. 验证: el.value 为空
如果 triple-click 无效,改用 Ctrl+A:
2. Input.dispatchKeyEvent: keyDown key=a modifiers=2 (Ctrl)
3. Input.dispatchKeyEvent: keyUp key=a modifiers=2
1. 聚焦编辑器
2. Input.dispatchKeyEvent: keyDown key=a modifiers=2 (Ctrl+A 全选)
3. Input.dispatchKeyEvent: keyUp key=a modifiers=2
4. Input.dispatchKeyEvent: keyDown Backspace
5. Input.dispatchKeyEvent: keyUp Backspace
6. 等待 50ms
7. 验证: editor.textContent.trim() 为空
1. 聚焦 + 清空
2. locator.type("要填入的内容", {delay: 80})
3. 验证(见 3-C 节)
防机器人检测场景,delay 调大:
2. locator.type("要填入的内容", {delay: 120})
Publish videos to Bilibili (B站) via Open Platform API (OAuth2). Supports chunked video upload, cover image, tags, and partition selection. Requires BILIBILI_APP_ID and BILIBILI_APP_SECRET environment variables.
内容校准预测循环——打分 → 盲预测 → T+3d复盘 → 进化 rubric。按平台独立迭代,每个平台拥有自己的 rubric、校准池、预测日志、受众画像。本技能负责打分(blind sub-agent + score-only.sh + 阈值门 + 流程 1A)与校准闭环;发布记录与数据采集由 published-track 统一管理。
口播视频去口误。自动识别并删除静音、语气词、卡顿词、重复句、残句等,输出干净视频+字幕+剪映草稿。触发词:去口误、剪口播、de-mouth、去除口误
Generate custom WeChat CSS themes from natural language descriptions, WeChat article URLs, or recent articles from a WeChat Official Account. Produces a valid CSS file conforming to wenyan and ready for wx-mp-publisher.
一站式短视频制作。支持文章链接、追爆报告、文字主题等多种输入,用 gen.py 直连火山 Seedance / 阿里云百炼 Wan2.7-HappyHorse 端点生成视频素材(声画同出),FFmpeg 组装成片。
通过浏览器自动化发布视频到微信视频号。处理 wujie shadow DOM,支持视频上传、标题描述填写、即时发布。