专项能力 / Specialized

Slack 自动化

Slack 的网页版就是一个大型 Web 应用——chrome-use 把它当成普通页面来驱动: 连接已经登录的会话,读可访问性快照拿到带 @ref 的元素, 然后查未读、跳频道、搜会话、抽消息。全程走真实浏览器, 不碰 Slack API、不需要 OAuth、webhook 或机器人令牌

ℹ️ 本页只是速览
下面归纳了最常用的几套操作配方。完整的 refs 约定、边界情况和调试细节, 随时用 skills get slack 拉出完整技能文档深入查阅。

快速开始

chrome-use 走扩展驱动你已登录的真实 Chrome,Slack 的登录直接复用,不用开调试端口 (Chrome 136+ 连调试端口每次都弹「Allow remote debugging?」,见 它怎么工作)。让它打开 Slack 网页版就行。

connect-or-open.sh
# 走扩展连你已登录的真实 Chrome,打开 Slack 网页版(登录直接复用)
$ chrome-use open https://app.slack.com

# 拿一张可交互快照,看看页面上有什么
$ chrome-use snapshot -i
✅ 核心循环
连接 / 导航 → snapshot -i 拿到带 refs 的元素 → 点击标签页、展开分组或进入频道 → 读数据或执行动作 → 需要留证据时 screenshot每次导航后都要重新快照, 因为 refs 会随页面变化。

查未读消息

未读散落在几个地方:侧边栏顶部的 “More unreads” 按钮、Activity 标签页里的未读汇总、 以及带加粗/角标的频道名。先快照定位 refs,再逐个查。

check-unreads.sh
# 接着上面打开的 Slack 标签
$ chrome-use snapshot -i

# 进 Activity 标签页看未读汇总(ref 每次可能不同)
$ chrome-use click @e14
$ chrome-use wait 1000
$ chrome-use screenshot activity-unreads.png

# 或者展开侧边栏的 “More unreads”
$ chrome-use click @e21
$ chrome-use wait 500
$ chrome-use screenshot expanded-unreads.png

想数一下未读频道有多少个,展开未读分组后按 treeitem 统计:

count-unreads.sh
# 展开未读后,每个带频道名的 treeitem 算一个未读
$ chrome-use snapshot -i | grep -c "treeitem"

导航到频道

快照后在侧边栏列表里找频道名(如 engineeringproduct-design), 点它对应的 treeitem ref。进频道后用 wait --load networkidle 等内容加载完再操作。

open-channel.sh
$ chrome-use snapshot -i

# 点频道对应的 treeitem(示例 ref,以你的快照为准)
$ chrome-use click @e94
$ chrome-use wait --load networkidle

# 在消息区往下滚动加载更多历史
$ chrome-use scroll down 500
$ chrome-use screenshot channel-messages.png
✅ 侧边栏很长时
频道列表滚不动?在侧边栏容器里滚,别滚整页: chrome-use scroll down 300 --selector ".p-sidebar"

搜索会话

用 Slack 自带搜索最省事:点搜索按钮,填关键词,回车,等结果加载。

search.sh
$ chrome-use snapshot -i
$ chrome-use click @e5          # 搜索按钮
$ chrome-use fill @e_search "keyword"
$ chrome-use press Enter
$ chrome-use wait --load networkidle
$ chrome-use screenshot search-results.png

抽取数据

要程序化解析时,用 JSON 快照拿机器可读的可访问性树;要单个元素的文字,用 get text。 更系统的抽取模式见 提取数据

extract.sh
# 整棵可访问性树导出为 JSON,便于解析
$ chrome-use snapshot --json > slack-snapshot.json

# 取某条消息 / 某个元素的纯文本
$ chrome-use get text @e_message_ref

# 当前页面的 URL 与标题,留作引用
$ chrome-use get url
$ chrome-use get title

解析 JSON 时留意这些字段的对应关系:

你要的东西在快照里找
频道名treeitemname 字段(子频道 level=2
消息内容listitem / document 元素
用户名带用户信息的 button 元素
时间戳带时间信息的 link 元素

常用 refs 与侧边栏结构

Slack 侧边栏大致是:Threads / Huddles / Drafts & sent / Directories, 接着是分组标题(Starred、Channels 等)下挂的频道 treeitem,然后是 Direct Messages、Apps, 底部有 “More unreads” 按钮。下面这些 ref 是常见位置,仅供参考,实际以你的快照为准

🏠 @e12 · Home

主页标签页(通常)。

✉️ @e13 · DMs

私信标签页。

🔔 @e14 · Activity

动态标签页,显示未读数。

🔎 @e5 · Search

搜索按钮。

📥 @e21 · More unreads

展开未读频道列表(每次会变)。

⚠️ refs 会漂移
文档里写的 @e14@e21 只是典型值,会随会话和页面状态变化。 永远先 snapshot -i 再点,不要硬编码 ref。

调试

本 stealth 分支默认关闭控制台/错误捕获——想用 console / errors, 得先带 AGENT_BROWSER_CAPTURE_CONSOLE=1 启动会话,否则返回空。

debug.sh
# 需要先以 AGENT_BROWSER_CAPTURE_CONSOLE=1 启动会话
$ chrome-use console
$ chrome-use errors

# 卡住时看看当前页面状态
$ chrome-use get url
$ chrome-use get title
$ chrome-use screenshot page-state.png

注意事项

ℹ️ 相关页面
Slack 网页版也是 Electron 桌面应用的一种——想驱动桌面客户端本身,见 Electron 桌面应用。想连你日常在用的登录态浏览器,见 驱动真实 Chrome。基础动作和读取快照分别见 交互操作读取页面, 等待策略见 等待与断言