diff --git a/skills/web-page/SKILL.md b/skills/web-page/SKILL.md index 7cbd0f9..315b8c2 100644 --- a/skills/web-page/SKILL.md +++ b/skills/web-page/SKILL.md @@ -1,14 +1,16 @@ --- name: web-page -description: "网页内容读取和截图工具。当用户提供网页链接并希望了解页面内容、总结页面讲了什么,或需要截取整个网页/可视区域/指定元素/指定区域时使用。" -argument-hint: "需要 url;mode 可为 content 或 screenshot;截图可选 screenshot_mode、selector、x、y、width、height。" +description: "网页内容读取、自动化交互和截图工具。当用户提供网页链接并希望了解页面内容、点击按钮、填写表单、等待页面变化,或需要截取整个网页/可视区域/指定元素/指定区域时使用。" +argument-hint: "需要 url;mode 可为 content 或 screenshot;自动化可传 actions/actions_file;截图可选 screenshot_mode、selector、x、y、width、height。" --- # Web Page Skill ## 描述 -这是一个本地网页读取和截图技能。它使用基础镜像中的 Chromium 以 headless 模式打开网页,通过 Chrome DevTools Protocol 在本地完成页面渲染、正文抽取和截图,不调用外部 AI 接口。 +这是一个本地网页读取、自动化交互和截图技能。它使用基础镜像中的 Chromium 以 headless 模式打开网页,通过 Chrome DevTools Protocol 在本地完成页面渲染、点击、输入、表单操作、正文抽取和截图,不调用外部 AI 接口。 + +验证码处理采用安全边界内的自动检测:脚本可以识别常见验证码/人机验证页面并停止自动化,给出明确错误提示;不提供破解、绕过、代答验证码或规避网站风控的能力。遇到验证码时,应让用户在合法授权下人工完成验证,或使用已验证后的页面/会话环境继续处理。 技能脚本位于 `scripts/web_page.js`,依赖基础镜像提供的 Node.js 24+ 和 Chromium。基础镜像中已配置 `CHROME_BIN=/usr/bin/chromium` 和 `CHROME_PATH=/usr/bin/chromium` 时,无需额外安装浏览器。 @@ -16,6 +18,7 @@ argument-hint: "需要 url;mode 可为 content 或 screenshot;截图可选 s - 用户发来网页链接,并问「这个网页说了什么」「帮我看看这个链接」「总结一下这个页面」。 - 用户要求读取网页正文、标题、描述、主要内容或页面中的链接。 +- 用户要求打开网页后点击按钮/链接、填写输入框、选择下拉框、勾选复选框/单选框、提交表单、等待某个元素出现或滚动页面。 - 用户要求「截图这个网页」「截整个页面」「截当前可视区域」「截页面里某个区域」。 - 用户提供 CSS 选择器并要求截取对应元素,例如「截取 `.article` 这一块」。 @@ -68,6 +71,26 @@ argument-hint: "需要 url;mode 可为 content 或 screenshot;截图可选 s "wait_ms": { "type": "integer", "description": "页面 load 之后额外等待的毫秒数,默认 1500。遇到前端渲染较慢的网站可调大。" + }, + "actions": { + "type": "array", + "description": "页面打开后、抽取内容或截图前要顺序执行的自动化动作数组。也可通过命令行传 JSON 字符串。", + "items": { + "type": "object" + } + }, + "actions_file": { + "type": "string", + "description": "包含 actions JSON 的本地文件路径。适合动作较多或命令行不方便转义时使用。" + }, + "action_timeout_ms": { + "type": "integer", + "description": "单个自动化动作默认超时时间,默认 15000。" + }, + "captcha_strategy": { + "type": "string", + "enum": ["detect", "ignore"], + "description": "验证码处理策略。detect 表示执行动作前后检测疑似验证码并停止;ignore 表示不检测。传 actions 时默认 detect,否则默认 ignore。" } }, "required": ["url"], @@ -84,9 +107,71 @@ argument-hint: "需要 url;mode 可为 content 或 screenshot;截图可选 s - `--x <数字> --y <数字> --width <数字> --height <数字>` 可选,`region` 截图模式必填 - `--max_chars <数字>` 可选,默认 `16000` - `--wait_ms <毫秒>` 可选,默认 `1500` +- `--actions ''` 可选,页面打开后顺序执行的自动化动作 +- `--actions_file <本地JSON路径>` 可选,从文件读取自动化动作 +- `--action_timeout_ms <毫秒>` 可选,单个动作默认超时时间,默认 `15000` +- `--captcha_strategy ` 可选,传 actions 时默认 `detect`,否则默认 `ignore` - `--output <本地PNG路径>` 可选,仅截图模式使用 - `--send ` 可选,仅截图模式使用,默认 `auto` +## 自动化动作 + +`actions` 是一个 JSON 数组,脚本会在页面 `load` 并等待 `wait_ms` 后,按顺序执行这些动作,然后再进行正文抽取或截图。 + +通用字段: + +- `type`:动作类型,必填。 +- `selector`:CSS 选择器。多数表单动作必填。 +- `text`:按可见文本、`aria-label`、`title`、`placeholder` 等匹配元素。`click` 和 `scroll_to` 可用。 +- `exact`:文本是否精确匹配,默认 `false`。 +- `index`:匹配到多个元素时使用第几个,从 `0` 开始,默认 `0`。 +- `timeout_ms`:当前动作超时时间,默认使用 `action_timeout_ms`。 +- `wait_ms_after`:动作完成后的额外等待毫秒数,默认 `300`。 +- `wait_for_navigation`:点击或按键后是否等待页面 load,默认 `false`。 + +支持的动作: + +- `click`:点击元素。需要 `selector` 或 `text`。 +- `fill`:清空并填写输入框、文本域或可编辑元素。需要 `selector` 和 `value`。 +- `type`:向当前焦点或指定元素追加输入文本。需要 `text`,可选 `selector`。 +- `press`:按键。需要 `key`,例如 `Enter`、`Tab`、`Escape`、`Backspace`、`ArrowDown`。 +- `select`:设置 `