一键将 X (Twitter) 推文和长文转换为 Markdown 文件,连同图片一起打包下载。
- 📝 推文转 Markdown — 提取推文正文、图片,转换为结构清晰的 Markdown
- 📰 X Article(长文)支持 — 完整提取长文内容,保留标题、段落、图文穿插顺序
- 🖼️ 图片本地化 — 自动下载推文/文章中的所有图片,打包到 ZIP 中
- 📦 一键 ZIP 下载 — Markdown 文件 + 图片文件夹,解压即用
- 🎯 无噪音提取 — 自动过滤 UI 噪音(操作栏、互动计数、推广文案、时间戳等)
- 🔘 原生风格按钮 — 下载按钮融入 X 的操作栏,视觉一致
- 进入任意一条推文详情页或 X Article 页面
- 在推文操作栏(回复、转发、喜欢旁边)找到 ⬇ 下载按钮
- 点击后自动提取内容并下载
.zip文件
下载的 ZIP 包含:
article_1709312345678.zip
├── tweet.md # Markdown 正文
└── images/
├── image_1.jpg # 封面图 / 第一张图
├── image_2.jpg
└── ...
-
克隆或下载本仓库
git clone https://github.com/your-username/x2md-ext.git
-
打开 Chrome,进入
chrome://extensions/ -
开启右上角 开发者模式
-
点击 加载已解压的扩展程序,选择
x2md-ext目录 -
完成!访问 X 上任意推文详情页即可看到下载按钮
x2md-ext/
├── manifest.json # Chrome 扩展配置(Manifest V3)
├── background/
│ └── background.js # Service Worker(处理下载等后台任务)
├── content/
│ ├── content.js # 核心逻辑:DOM 解析、内容提取、打包下载
│ └── content.css # 下载按钮样式
├── libs/
│ └── jszip.min.js # JSZip 库(ZIP 打包)
├── icons/ # 扩展图标
└── docs/ # 文档资源
| 类型 | URL 模式 | 识别方式 |
|---|---|---|
| 普通推文 | /user/status/123 |
data-testid="tweetText" |
| X Article | /user/article/123 |
data-testid="articleBody" |
| Article(status URL) | /user/status/123 |
URL 路径 + DOM 特征推断 |
- 普通推文:直接从
article[data-testid="tweet"]中提取文本和图片 - X Article(/article/ 页面):通过
articleBody容器递归遍历 DOM,按语义标签提取标题、段落、代码块、引用、列表和图片 - X Article(/status/ 页面):DOM 有序遍历主内容区,交替收集文本片段和图片,保持原始图文排列;自动过滤 UI 噪音
自动过滤的内容包括:
- 操作栏(回复、转发、喜欢、书签等按钮)
- 互动计数(22, 75, 4.1万 等)
- 时间戳、导航文字、推广文案
- 重复的作者信息和标题
| 权限 | 用途 |
|---|---|
activeTab |
访问当前标签页的 DOM |
downloads |
触发文件下载 |
storage |
存储扩展配置(预留) |
*://*.x.com/* |
在 X 页面注入内容脚本 |
*://pbs.twimg.com/* |
下载推文中的图片资源 |
- 视频:当前版本不支持视频下载(仅支持封面图占位)
- 评论区:仅提取正文内容,不包含评论
- SPA 限制:从
/status/页面无法通过 fetch 获取/article/的结构化 DOM(X 是 SPA),使用 DOM 遍历兜底方案
- 视频下载支持
- 评论区提取(可选)
- 批量下载支持
- 导出格式选项(纯 Markdown / HTML)
- 配置面板(噪音过滤规则自定义)
MIT
