将整页可滚动内容提取为文本并写入剪贴板:微信聊天记录、网页正文、公众号文章。
中文 · English
下载 APK · Android 8.0 及以上 · 完全离线 · MIT
微信未提供聊天记录的批量导出功能,内置的「多选 → 转发」需要逐条勾选。
多数同类工具通过 Android 无障碍服务(AccessibilityService)读取界面内容。经实测,当前版本的微信在登录后的会话与聊天界面不再向无障碍框架暴露节点内容,该方案在这些界面上已不可用。
实测环境与结果
| 环境 | 界面 | 可读文本节点数 |
|---|---|---|
| 微信 8.0.72 / Android 17 / Pixel 9a | 聊天、聊天记录详情 | 0 |
| 微信 8.0.76 / Android 15 模拟器 | 登录引导页 | 3 |
| 微信 8.0.76 / Android 15 模拟器 | 语言设置列表 | 16 |
登录前的页面仍可读取,说明限制作用于登录后的主界面,而非整个应用。
该限制不来自本项目的服务配置:以 shell 权限运行的系统工具 uiautomator dump 在同一界面上得到相同的空节点;关闭设备上全部无障碍服务并冷启动微信后复测,结果不变。
<node text="" class="" package="com.tencent.mm" enabled="false" bounds="[0,0][0,0]" />同一时刻,系统设置、桌面、Chrome 均可正常读取(分别为 16、28 及数百个文本节点)。
微信不限制屏幕截取与手势注入。本项目在无障碍通道不可用时,改用屏幕截取 + 端侧中文 OCR,并以实测的画面位移为依据进行多屏拼接。
- 自动翻页 —— 由应用注入滑动手势并识别边界,到达末尾后自动停止。一段跨越约一年的聊天记录用时约 20 秒
- 微信聊天记录结构化输出 —— 输出为「发言人(时间):内容」。普通聊天界面与「聊天记录」详情页采用不同排版,分别处理
- 不限于微信 —— 网页、公众号文章及任意可滚动列表均适用
- 无重复、不乱序 —— 拼接依据实测位移而非文本匹配,与滑动方向无关
- 完全离线 —— OCR 模型随应用分发并在本机运行,内容不出设备;截图仅在内存中处理
- 开启无障碍服务,显示悬浮球
- 开启截屏权限(仅微信需要,系统弹窗中选择「共享整个屏幕」)
- 打开目标页面,点击悬浮球,选择「一键复制」
提取结果自动写入剪贴板,可另存为 txt 或分享。若自动翻页被页面拦截,可改用「开始监测」由用户手动翻页,任意方向均可。
完整说明见 使用文档。
=== 微信聊天记录:小明和小红的聊天记录 ===
导出时间:2024-03-02 10:35
小红(2024年3月1日 09:15:22):明天的会议改到下午三点了
小明(2024年3月1日 09:16:04):收到,我把会议室也顺延一小时
小红(2024年3月1日 09:17:31):好的。资料我今晚发你
小明:那份预算表也一起发吧
小明(2024年3月2日 10:03:12):看到了,我先过一遍
图片、语音等非文本消息以占位符表示:[图片]、[语音 6秒]。
完整设计见技术文档,此处摘录三项关键决策。
双通道读屏与自动降级。 优先使用无障碍节点树:结果准确、无需额外权限,且可获取控件类型。仅当该通道读不到内容时才启用屏幕截取 OCR。判据为实际读取结果而非预设包名列表,因此在无障碍可读的页面上不会请求屏幕共享权限。
基于几何位置的拼接。 多屏内容合并的常规做法是匹配文本重叠段。该方法在 OCR 输入下失效:识别结果存在逐次抖动,连续匹配一旦中断,整屏内容会被判定为新增并重复追加(实测每屏 33 行、每次新增 34 行,去重完全无效)。本项目改为测量相邻两屏的实际位移,将每条内容映射到统一的全局纵坐标,再按坐标排序去重,因而与滑动方向无关。
位移估计采用投票法。 对文本相同的条目按位移分桶,以条目而非配对为单位计票取众数,并要求达到最低覆盖率。聊天记录中昵称等文本每屏重复出现十余次,若按配对计票,错误位移易形成虚假共识。
- 截图仅在内存中完成识别,随即释放,不写入磁盘
- OCR 模型随 APK 分发并在本机运行,内容不离开设备,运行期间不产生网络请求
- 提取结果默认仅驻留内存;归档至磁盘为可选项,默认关闭
- 主界面提供「清除存档」
APK 体积 46 MB,其中约 44 MB 为离线中文 OCR 模型。
| 限制 | 说明 |
|---|---|
| 语音与图片 | 仅输出占位符,语音内容无法识别 |
| OCR 准确度 | 深色主题下部分字符易误识别,切换为浅色主题可改善 |
| 快速滑动 | 相邻两屏失去重叠时无法估计位移,将按跳转处理并在日志中告警 |
| 截屏授权有效期 | 应用进程被系统回收后失效,需重新授权 |
需要 JDK 17(AGP 8.7 不支持更高版本)。
export JAVA_HOME=/path/to/jdk-17
./gradlew assembleDebug
adb install -r app/build/outputs/apk/debug/app-debug.apk测试:
./gradlew :app:testDebugUnitTest # 33 项单元测试
./gradlew connectedDebugAndroidTest # 像素级测试,需连接设备参与开发请阅读 贡献指南。
本项目以 MIT 许可证 发布。
使用者应确保其使用方式符合所在司法辖区的法律,并仅用于提取本人有权访问的内容。


