{"skill":{"slug":"twitter-web-autopost","displayName":"Twitter Web AutoPoster","summary":"通过浏览器工具自动操作网页版 Twitter/X，完成热点爬取、推文撰写和一键发布。支持全自动模式（无需用户确认）和手动确认模式。","description":"---\nname: twitter-web-autopost\ndescription: 通过浏览器工具自动操作网页版 Twitter/X，完成热点爬取、推文撰写和一键发布。支持全自动模式（无需用户确认）和手动确认模式。\n---\n\n# Twitter Web AutoPoster\n\n## 概述\n\n这个 Skill 告诉你（OpenClaw Agent）如何通过 **浏览器工具** 操作网页版 Twitter/X 来自动发推。\n它假设用户已经在浏览器中登录了自己的 X 账号，或者可以在你提示后手动完成一次登录。\n\n你不使用任何本地 CLI 或 API key，只通过 `browser` 工具驱动网页完成发帖流程。\n\n---\n\n## 何时触发\n\n当用户出现以下意图时，应优先考虑使用本 Skill：\n\n- 「帮我发一条推特/推文」\n- 「自动在 X 上发帖 / 发短评」\n- 「围绕某个热点写一条推特并发布」\n- 「定期在 Twitter 上发总结」等\n\n如果用户只想「写草稿，不一定要发」，可以只用语言模型写完文本，不调用本 Skill 的发帖部分。\n\n---\n\n## 前置假设\n\n- 用户在这台机器的浏览器里可以正常访问 `https://x.com`（或 `https://twitter.com`）。\n- 用户愿意在需要时手动完成一次登录（你只能提示，不能看到密码）。\n- Gateway 已启用 `browser`（openclaw-managed 或 chrome profile 均可）。\n\n---\n\n## 总体流程\n\n当用户让你「自动发推」时，遵循以下步骤：\n\n1. **明确内容**\n   - 如果用户已经给出完整文案，直接使用那段文字。\n   - 如果用户只给主题或大概方向：\n     - 用大模型先生成 1～3 条候选推文（控制在 240 字符内）。\n     - 根据用户偏好（语气、语言、是否带 hashtag）自动选择最合适的一条。\n     - 如果用户特别强调「全自动」或「不用问我」，你可以直接选用，不必回显给用户确认；否则在发帖前简要复述一遍让用户确认。\n\n2. **启动浏览器会话**\n   - 通过 `browser` 工具，使用合适的 profile（推荐：`openclaw`）。\n   - 如果当前没有打开 X 页面，先导航到：\n     - `https://x.com/compose/tweet`\n     - 无法访问时，可回退到 `https://x.com/home` 再寻找发帖入口。\n\n3. **处理登录**\n   - 如果页面显示登录要求（输入邮箱/手机号/密码或验证码）：\n     - 停止自动输入。\n     - 通过聊天明确提示用户：\"请在刚刚弹出的 X 页面中手动完成登录，完成后回复『已登录』，我会继续自动发帖。\"\n     - 收到用户「已登录」后，再重新调用 `browser` 工具刷新/重新打开发帖页面，继续下面步骤。\n\n4. **定位发帖输入框**\n   使用 `browser snapshot` + `browser act` 的方式寻找：\n   - 页面上 role 为 `textbox`、有 placeholder 类似：\n     - \"What is happening?!\" / \"有什么新鲜事？\" / \"发推文\"\n   - 或包含 aria-label：\n     - \"Post text\" / \"Tweet text\" / \"发推文文本\"\n\n   一旦定位到输入框：\n   - 清空已有内容（如果有）。\n   - 使用 `type` / `fill` 操作，将最终推文文本完整输入。\n\n5. **点击「发布」按钮**\n   - 再次通过 snapshot 找到：\n     - 文本为 \"Post\"、\"Tweet\"、\"发帖\"、\"发布\" 的按钮，或\n     - role 为 `button` 且 aria-label 中含有 \"Post\"、\"发布\" 等。\n   - 使用 `click` 操作点击按钮。\n   - 如遇短暂错误或按钮不可点击，可尝试：\n     - 等待几秒再重试；\n     - 重新 snapshot 校验按钮状态。\n   - 不要进行超过 2～3 次的无意义重试，避免被判为异常行为。\n\n6. **确认是否发出**\n   - 观察发帖后页面变化：\n     - 主页时间线顶部出现刚刚内容一致的推文，或\n     - 页面跳转到包含这条推文详情的 URL（通常类似 `https://x.com/<handle>/status/<id>`）。\n   - 通过浏览器地址栏或 DOM 链接元素，提取这条推文的 URL。\n\n7. **向用户回报结果**\n   - 在当前聊天中用自然语言汇报：\n     - 成功/失败状态；\n     - 最终发送的推文完整文本；\n     - 推文 URL。\n   - 如失败，说明：\n     - 卡在哪一步（登录、找不到输入框、按钮点击失败、网络超时等）；\n     - 已尝试过哪些自动修复手段；\n     - 需要用户如何配合（例如「请确认已成功登录 X 并重新让我发一次」）。\n\n---\n\n## 安全与风控\n\n- **内容安全**：不得自动发送明显违法、煽动仇恨或暴力的内容。如用户指令存在风险，应先在聊天里提醒用户，并建议修改，实在不合规时拒绝发布。\n- **频率控制**：\n  - 避免在极短时间内连续大量发推（例如几秒内多次发帖），以免触发平台风控。\n  - 如用户要求「批量」或「定时」发帖，你可以：\n    - 先生成所有文案；\n    - 再按用户允许的频率每次执行一次浏览器发帖流程。\n- **重试策略**：\n  - 网络或元素定位失败时，最多自动重试 1–2 次；\n  - 超过后应停止重试，向用户说明情况，避免被判为机器人攻击行为。\n\n---\n\n## 示例调用场景\n\n**场景 1：用户给定完整文案**\n\n> 用户：帮我把这段英文当成推特发出去：「AI is changing global geopolitics faster than we can regulate it…」\n\n你的行为：\n- 不再改写文案；\n- 直接走 2–7 步骤完成发帖；\n- 最后返回推文链接。\n\n**场景 2：用户只给主题，要求全自动**\n\n> 用户：帮我围绕今天的 AI 热点自动写一条英文推特并直接发出去，不用再问我确认。\n\n你的行为：\n- 自己选取 1 个合适热点；\n- 生成推文文本；\n- 不再回显给用户确认，直接发帖；\n- 最后用一条总结消息说明你选择了哪个热点、发了什么内容、链接是什么。\n\n**场景 3：爬取热点 + 撰写 + 发布一体化**\n\n> 用户：帮我爬取推特热点，自己写推文，自己发布。\n\n你的行为：\n- 先用 `browser` 打开 `https://x.com/explore/tabs/trending`，提取前 10 条热点话题；\n- 按优先级（AI/科技/国际政治经济 > 娱乐/体育）自行挑选 1 个主题；\n- 生成 1 条推文（≤240 字符，理性、有观点、可带 1-2 个 hashtag）；\n- 直接发帖；\n- 回报：选用的热点、推文全文、推文 URL。\n\n---\n\n## 技术提示（给 Agent 自己看）\n\n- 优先使用 `browser` 工具，而不是尝试未经授权的 HTTP API。\n- 利用 `snapshot --interactive` 获取带 ref 的节点，然后用 `click ref=..` / `type ref=..` 等方式操作，避免依赖易变的 CSS 选择器。\n- 注意语言和 UI 可能是中文、英文或混合界面，要兼容多种 placeholder/aria-label 文本。\n- X/Twitter 的 compose 页面 URL 可能是 `https://x.com/compose/tweet` 或 `https://x.com/compose/post`，两种都尝试。\n- 如果用户要求附带图片，可以先用 `browser upload` 上传图片文件到推文编辑器的图片附件区域。\n","tags":{"automation":"0.1.0","browser":"0.1.0","latest":"0.1.0","social-media":"0.1.0","twitter":"0.1.0"},"stats":{"comments":0,"downloads":924,"installsAllTime":3,"installsCurrent":3,"stars":0,"versions":1},"createdAt":1772548961776,"updatedAt":1778994870573},"latestVersion":{"version":"0.1.0","createdAt":1772548961776,"changelog":"Initial release of twitter-web-autopost skill:\n- Automates posting on Twitter/X web via browser tools—no API key needed.\n- Supports both fully automated and manual confirmation modes.\n- Handles composing, editing, and publishing tweets from user prompts or trending topics.\n- Manages login flow, input box detection, and error handling interactively.\n- Provides user feedback on posting status, errors, and resulting tweet link.\n- Enforces safety measures and rate limiting to prevent abuse.","license":null},"metadata":null,"owner":{"handle":"kelcey2023","userId":"s17d0yeqck74np9sh3ks2p1xx583hjnj","displayName":"kelcey2023","image":"https://avatars.githubusercontent.com/u/128341611?v=4"},"moderation":{"isSuspicious":false,"isMalwareBlocked":false,"verdict":"clean","reasonCodes":["review.llm_review"],"summary":"Review: review.llm_review","engineVersion":"v2.4.24","updatedAt":1780089743828}}