You
Obsidian Web Clipper是啥用途?
Gemini
Obsidian Web Clipper 是由 Obsidian 官方推出的浏览器扩展程序(支持 Chrome、Firefox、Safari 等),它的核心用途是将网页内容高效地保存到你的 Obsidian 本地库中。
简单来说,它就像一个“网页搬运工”,但比简单的复制粘贴要强大得多。
核心用途与功能
- 一键剪藏 (Clipping): 可以将当前网页的全文、选定内容或简要信息直接转换为 Markdown 格式并存入 Obsidian。
- 实时高亮 (Highlighting): 允许你在浏览器中直接对网页重点进行高亮标记,这些高亮内容会自动同步到你的笔记中。
- 智能提取 (Metadata): 自动提取网页的标题、作者、发布日期、URL 等元数据,方便后续检索。
- 高度定制化 (Templates): 你可以根据不同的需求(如:读文章、存食谱、看论文)创建不同的模板,决定存入 Obsidian 的笔记长什么样。
- AI 辅助能力 (Interpreter): 支持接入 AI 接口(如 Gemini, GPT 等),在剪藏的同时对网页进行总结、翻译或提取关键点。
- 离线保存: 所有的内容最终都以标准的 Markdown 文件存储在你的本地设备上,即使原网页被删除,你依然拥有这些资料。
为什么用它?
- 消除格式乱码: 直接复制网页内容往往会带着杂乱的 HTML 格式,Web Clipper 会自动帮你清理并转换为整洁的 Markdown。
- 构建个人知识库: 它是构建“第二大脑”的入口。你可以把网页变成你笔记库中的一个“节点”,方便你进行双链引用(Backlinks)。
- 替代第三方服务: 它可以替代 Readwise 或 Raindrop 等服务,让你在完全掌握数据隐私的前提下,实现类似的效果。
使用建议: 如果你平时经常需要管理 Docker 容器、折腾 PVE 虚拟机,或者是在研究 Gemini API 开发,这个工具非常适合用来收集技术文档和 GitHub 上的 Issue 解决方案,配合你现有的 Google Apps Script 自动化流,可以极大地提升信息处理效率。
You
如何和Google Apps Script 结合?
Gemini
将 Obsidian Web Clipper 与 Google Apps Script (GAS) 结合,可以打通“网页剪藏”到“自动化工作流”的闭环。虽然 Web Clipper 主要负责将数据存入 Obsidian 本地,但通过特定的触发机制,你可以实现极其强大的自动化。
以下是几种核心的结合方案:
1. 自动化任务同步(从剪藏到日历/待办)
如果你在剪藏网页时,发现这是一个需要以后处理的任务,你可以通过 GAS 实现自动化同步。
- 实现逻辑: 在 Web Clipper 的模板中加入特定的标签(如
#task)。利用 Obsidian 的第三方插件(如 Obsidian To Cloud 或 Google Calendar 插件),将带有该标签的笔记元数据发送到你的 GAS Web App URL。 - GAS 作用: 解析接收到的 JSON 数据,自动在 Google Calendar 中创建一个提醒,或在 Google Tasks 中生成一个带原网页链接的任务。
2. 技术文档的“云端备份与索引”
当你剪藏了一篇重要的技术文档(例如关于 PVE 或 Docker 的配置指南)到本地后,可以通过 GAS 在 Google Sheets 中建立一个云端索引。
- 实现逻辑: 在 Obsidian 中使用
Actions URI或特定的推送插件。 - GAS 作用:
- 编写一个
doPost(e)函数。- 当 Obsidian 触发推送时,GAS 将网页标题、URL、剪藏时间以及你给出的 AI 总结自动写入 Google Sheets 。
- 这样你即使不在电脑旁,也能通过手机查看最近剪藏了哪些核心技术资料。
- 编写一个
3. 利用 GAS 充当自定义 AI 处理器
Obsidian Web Clipper 支持自定义 AI 解释器(Interpreter)。你可以不直接调用 OpenAI/Gemini 接口,而是指向你自己的 GAS 接口。
- 实现逻辑: 在 Web Clipper 设置中,将 API 终端指向你的 GAS 部署地址。
- GAS 作用:
- 接收网页的 Markdown 文本。
- 在 GAS 内部调用 Gemini API 进行深度加工(例如:自动提取代码块、将 JavaScript 转换为 Python、或者根据你之前的学习习惯进行总结)。
- 返回处理后的文本给 Web Clipper,直接保存到 Obsidian。
- 接收网页的 Markdown 文本。
4. 联动 Telegram 进行即时通知
由于你之前配置过 Telegram Bot 结合 GAS 的流,这里可以进一步扩展。
- 应用场景: 当你在浏览器中通过 Web Clipper 剪藏了一个重要的 Bug 修复方案或项目灵感。
- GAS 作用: 作为一个中转站,当接收到新笔记的元数据时,GAS 自动通过 Telegram Bot 向你发送一条推送:“新资料已存入 Obsidian 库:[标题],点击查看详情”。
快速上手建议:
- 部署 Web App: 在 Google Apps Script 编辑器中,编写
doPost逻辑并部署为“任何人(甚至是匿名)”可访问。 - 设置 Web Clipper 模板: 在官方插件的 Templates 设置中,利用其变量功能(如
{{title}},{{url}},{{content}})。 - 桥接: 如果不想写太多代码,可以使用 Obsidian 社区的 Local REST API 插件,它能让你的 GAS 脚本直接通过内网穿透(如你已有的 Cloudflare Tunnel)反向读写你的 Obsidian 库。
这种组合能够将你从“手动整理资料”的琐事中解放出来,让你更专注于环境部署和代码开发本身。
You
Obsidian Web Clipper如何在自动化脚本里调用?
Gemini
要从自动化脚本的维度调用 Obsidian Web Clipper ,需要明确一个核心逻辑:Web Clipper 本身是一个浏览器扩展,它依赖浏览器的运行环境。
如果你想在代码(如 Python、Node.js)或自动化脚本(如 shell)中实现类似的功能,主要有三种路径:
1. 利用官方的 URL Scheme (最简单)
Obsidian 官方提供了一套 URI 协议,允许你通过一个特定格式的链接直接触发剪藏动作。你可以通过脚本调用系统的 open 命令来触发。
- 格式:
obsidian://clipper?url=...&title=... - Python 示例:
import webbrowser import urllib.parse url = "https://example.com" title = "技术文档" # 对参数进行编码 encoded_url = urllib.parse.quote(url, safe='') encoded_title = urllib.parse.quote(title, safe='') # 触发 Obsidian 打开并弹出剪藏界面 obsidian_uri = f"obsidian://clipper?url={encoded_url}&title={encoded_title}" webbrowser.open(obsidian_uri) - 优点: 简单,无需配置。
- 缺点: 仍会弹出浏览器界面,不是完全后台的“静默”自动化。
2. 利用 Local REST API 插件 (最专业)
由于你已经有 Proxmox 容器和 Cloudflare Tunnel 的实战经验,这种方法最适合你。安装 Obsidian 社区插件 Local REST API ,它会在你的 Obsidian 内部开启一个本地服务器。
- 实现步骤:
- 在 Obsidian 中启用
Local REST API。
2. 在你的自动化脚本(如 Python)中,通过POST请求直接向 Obsidian 发送 Markdown 数据。
- 在 Obsidian 中启用
- 脚本逻辑:
import requests API_KEY = "你的插件API_KEY" URL = "http://127.0.0.1:27123/active-file" # 或指定路径 headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "text/markdown" } content = "# 剪藏内容\n\n来自自动脚本的测试。" response = requests.post(URL, headers=headers, data=content.encode('utf-8')) - 进阶: 你可以将这个 API 挂载到你现有的 n8n 或 GAS 流程中。每当 GAS 监控到特定的 Google Calendar 变化或 Telegram 消息时,直接通过 API 在你的本地 Obsidian 库中创建笔记。
3. 无头浏览器模拟 (Headless Automation)
如果你需要像 Web Clipper 那样“解析”网页(把复杂的 HTML 转成整洁的 Markdown),而在脚本里直接请求网页源码又太乱,可以使用 Playwright 或 Puppeteer 。
- 实现思路:
- 脚本启动一个无头浏览器访问目标网页。
2. 注入类似Turndown的 JavaScript 库将 HTML 转为 Markdown。
3. 结合你的 Google Apps Script 逻辑,将转换后的内容推送到 Obsidian。
- 脚本启动一个无头浏览器访问目标网页。
- 结合点: 你可以写一个 Dockerized 的 Python 脚本运行在 PVE 的 Ubuntu 虚拟机上,定时巡检你关注的技术博客,一旦有更新,自动完成“解析 -> 转换 -> 推送至 Obsidian”的全过程。
总结:你的最优选
考虑到你目前的技能栈(JS/Python/GAS):
- 如果你想要手动确认: 使用 URL Scheme 。
- 如果你追求全自动化(静默运行): 使用 Local REST API 结合你的 n8n/GAS 。你可以将 GAS 脚本作为调度中心,处理完逻辑后,通过 API 直接把内容“塞”进你的 Obsidian 库中。
这种方案能完美契合你目前正在搭建的 Mobile Vision Agent 或是 Docker 容器管理 的监控流,实现技术文档的自动沉淀。
You
这个插件具体如何试用
Gemini
结合你提供的截图和目前的开发环境, Local REST API 插件可以让你通过代码直接读写 Obsidian。以下是具体的试用和配置步骤:
1. 基础配置
观察你的截图,插件已经安装并显示了关键的连接信息:
- API Key: 截图中间那一串长字符
1a7b63b1...就是你的身份令牌,脚本调用时必须带上它。 - 服务地址:
- HTTPS:
[https://127.0.0.1:27124/](https://127.0.0.1:27124/)(需要配置证书)。- HTTP:
[http://127.0.0.1:27123/](http://127.0.0.1:27123/)(非加密,在局域网或本机调试最方便)。
- HTTP:
- HTTPS:
- 开启非加密服务: 如果你是在本机脚本调试,建议在设置下方找到 "Enable Non-encrypted (HTTP) Server" 并将其打开,这样可以省去处理 SSL 证书的麻烦。
2. 使用 Python 脚本进行快速测试
既然你有 Python 开发经验,可以使用 requests 库来尝试向 Obsidian 写入一条笔记。
import requests
# 替换为截图中的 API Key
API_KEY = "1a7b63b197ec23f470c8aa6cd840826a363305ff40da7038b7126b52ad75182"
# 使用 HTTP 地址
BASE_URL = "http://127.0.0.1:27123"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "text/markdown"
}
# 1. 测试:获取库中所有文件的列表
def list_files():
response = requests.get(f"{BASE_URL}/vault/", headers=headers)
print(response.json())
# 2. 测试:创建一篇新笔记
def create_note():
filename = "API测试笔记.md"
content = "# 来自 API 的内容\n这是一条通过 Python 脚本自动生成的笔记。"
# 注意:路径需要 URL 编码
response = requests.put(f"{BASE_URL}/vault/{filename}", headers=headers, data=content.encode('utf-8'))
if response.status_code == 200:
print("笔记创建成功!")
if __name__ == "__main__":
create_note()
3. 与你的现有工作流结合
- 结合 Google Apps Script (GAS): 由于 GAS 运行在云端,无法直接访问你的
127.0.0.1。你可以利用你现有的 Cloudflare Tunnel 将这个 27123 端口映射出去。这样你在 GAS 中使用UrlFetchApp.fetch()就能远程给家里的 Obsidian 发送内容了。 - 结合 Docker/Redroid: 如果在 PVE 上的 Ubuntu 虚拟机里运行自动化脚本,确保虚拟机能访问到 Windows 宿主机的 IP 端口。
4. 常用 API 端点参考
你可以通过点击截图中的 "online docs" 查看完整文档,最常用的几个:
GET /vault/:列出所有文件。GET /active/:获取当前正在阅读的笔记内容。PUT /vault/filename.md:创建或覆盖笔记。POST /commands/command-id:远程执行 Obsidian 的命令(例如:切换主题、打开特定面板)。
你可以先尝试运行上面的 Python 脚本,只要 Obsidian 右下角弹出“文件已创建”的提示,就说明你已经成功打通了自动化链路。
You
等一下,我的意思是用 Obsidian Web Clipper插件,自动将网页转换为md笔记
Gemini
我明白你的意思了,你是想跳过手动点击“剪藏”按钮的过程,通过 自动化脚本 直接触发 Obsidian Web Clipper 的“网页转 Markdown”核心引擎。
这里有一个关键的技术细节:Obsidian Web Clipper 官方提供了一个隐藏的 URI 协议 (Protocol) 。这意味着你不需要操作浏览器界面,只需发送一个特定格式的指令(URL),它就会自动抓取网页、套用模板并存入 Obsidian。
核心调用方式:obsidian://clipper
你可以通过 Python 脚本或命令行调用这个协议。它的基本格式如下:
obsidian://clipper?url=网页地址&title=标题
1. Python 自动化脚本示例
如果你有一批链接需要批量转换,可以用这个脚本循环触发:
import webbrowser
import urllib.parse
import time
def auto_clip(target_url, title="Auto_Clipped"):
# 对参数进行编码,防止特殊字符导致链接失效
encoded_url = urllib.parse.quote(target_url, safe='')
encoded_title = urllib.parse.quote(title, safe='')
# 构建 Obsidian 官方剪藏协议链接
# 如果你想指定特定的模板,可以加上 &template=模板名
obsidian_uri = f"obsidian://clipper?url={encoded_url}&title={encoded_title}"
# 调用系统默认浏览器触发协议
webbrowser.open(obsidian_uri)
print(f"已触发剪藏: {title}")
# 示例:批量转换你最近关注的技术主题
urls = [
"https://docs.docker.com/get-started/",
"https://pve.proxmox.com/wiki/Main_Page"
]
for url in urls:
auto_clip(url)
time.sleep(2) # 留出一点响应时间
2. 结合 Google Apps Script (GAS) 的高级玩法
既然你熟悉 GAS 且有自动化同步的需求,可以实现这样的流:
- 触发: 你在 Google Sheets 里填入一个 URL,或者 Telegram Bot 收到一个链接。
- 中间层: GAS 接收到链接。
- 动作: 由于 GAS 运行在云端,无法直接打开你本地的
obsidian://,但你可以让 GAS 发送一个指令到你本地运行的脚本(比如通过你已有的 Cloudflare Tunnel )。 - 落地: 本地脚本收到指令后,执行上面的 Python 代码,Obsidian 就会自动弹出来完成“网页 -> MD”的转换。
3. 如何实现真正的“后台静默转换”?
如果你觉得弹出浏览器还是太烦,想要完全在后台完成转换,那么你有两个选择:
- 方案 A(推荐): 在 Web Clipper 的设置里,勾选 "Silent mode" (如果版本支持)。
- 方案 B(进阶): 使用开源的
Turndown库。既然你精通 JavaScript ,你可以写一个简单的脚本,利用Turndown将 HTML 直接转成 Markdown,然后通过你截图里的 Local REST API 直接写入 Obsidian。
小提示: 观察你截图中的插件列表,你已经安装了 Local REST API 。相比于 Web Clipper 插件,直接用 API 发送 Markdown 字符串才是真正的“全自动”方案。你可以用 Python 先抓取网页(
requests.get),用工具转成 MD,再通过 APIPUT到 Obsidian 里。这样连浏览器都不用开。
You
这里导出成笔记,为啥下面对话部分没导出?
Gemini
从你提供的这张截图来看, Obsidian Web Clipper 没有抓取到下方“对话”部分的详细内容,主要由以下几个技术原因导致的:
1. 动态加载与 Shadow DOM 的限制
NotebookLM 的页面结构比较特殊,对话框里的内容往往是 动态生成 的,或者被包裹在 Shadow DOM (影子 DOM)中。
- Web Clipper 默认的抓取逻辑通常只扫描页面的“主文章”区域(Main Content)。
- NotebookLM 的对话框在 HTML 结构上可能被识别为“侧边栏”或“辅助组件”,导致 Clipper 在自动化提取时将其忽略了。
2. 选区问题
观察截图中的 Clipper 预览窗口:
- 它目前抓取的是页面的 Metadata(元数据) ,如标题和描述。
- 解决办法: 你可以尝试在页面上 用鼠标手动高亮选中 你想导出的那段对话文字,然后再点击插件图标。通常 Web Clipper 会优先抓取“当前选中的内容”。
3. 模板 (Template) 设置
你当前使用的是 Default 模板。
- 默认模板可能只配置了抓取
{{content}},而content变量在复杂应用(如 NotebookLM)中往往抓取不到非标准正文的内容。 - 你可以进入 Web Clipper 的设置,创建一个针对 NotebookLM 的专用模板,或者尝试手动修改预览窗口里的内容再点击“添加到 Obsidian”。
4. 实验室/预览版页面的兼容性
由于 NotebookLM 本身是一个还在快速迭代的工具,其网页架构并不完全符合传统的“文章”格式。Clipper 的自动解析引擎(Reader View)在处理这类交互式 AI 对话界面时,确实容易出现漏抓。
建议操作:
- 手动选择: 在页面上全选那段对话文字,再点剪藏。
- 检查预览: 在点击“添加到 Obsidian”之前,先在预览框里向下滚动,看是否有内容。如果没有,可以点击预览框直接进行编辑或粘贴。
- 使用 API 绕过: 既然你精通 JavaScript ,如果经常需要抓取这种动态内容,可以写个简单的
bookmarklet(书签脚本),直接通过document.querySelector获取对话框的文本,然后调用你已经配置好的 Local REST API 发送到 Obsidian。
You
如果我想把多个网页的内容放到一个笔记里,如何操作
Gemini
如果你想将多个网页的内容整合到同一个 Obsidian 笔记中, Obsidian Web Clipper 本身目前主要逻辑是“一文一档”,但你可以通过以下三种方案实现“多合一”的操作:
方案一:修改插件设置实现“追加” (最推荐)
这是最符合你需求的方法。你可以通过修改 Web Clipper 的模板,让它不再每次都创建新文件,而是往同一个文件里添加内容。
- 打开 Web Clipper 设置 ,进入 Templates 。
- 修改文件名 (File Name): 将文件名固定为一个特定的名字,例如
网页剪藏合集。 - 修改存放路径: 确保路径一致。
- 关键步骤: 在剪藏预览界面,你会发现如果文件名已存在,插件通常会提示。此时你需要结合 Local REST API 插件的 Append 功能,或者在 Web Clipper 存入 Obsidian 后,利用 Obsidian 的插件(如 Unique Notes 或 Templater )进行合并。
2. 利用“选择性剪藏”+ 手动粘贴 (最灵活)
如果你只是想把几个网页的片段凑在一起:
- 打开第一个网页,选中文字,点击 Web Clipper,存入 Obsidian。
- 打开第二个网页,选中文字。 注意: 此时不要直接点击“添加到 Obsidian”,而是点击预览窗口右上角的 “复制到剪贴板”图标 。
- 回到 Obsidian 刚才那篇笔记,直接粘贴。
3. 开发者进阶方案:利用 Local REST API 自动化 (最强大)
既然你已经安装了 Local REST API (如你之前的截图所示),你可以编写一个简单的 JavaScript (或 Python) 脚本来实现真正的“全自动追加”。
逻辑如下:
- 使用 Web Clipper 抓取内容。
- 脚本调用 API 的
PATCH或POST方法,指向同一个文件。 - API 端点示例:
POST /vault/你的笔记名称.md - 在 Headers 中添加
X-Read-Mode: append(根据插件文档),这样每次发送新内容时,它都会自动追加到笔记末尾,而不是覆盖原文件。
4. 联动 Google Apps Script (云端中转)
你可以利用你的 GAS 技能做一个“收集器”:
- 收集: 写一个 GAS 脚本,接收来自不同网页的剪藏请求(可以利用 Web Clipper 的 Webhook 功能,或者你自己写个书签脚本)。
- 整合: GAS 将这些内容暂时存放在一个字符串变量或 Google Doc 中。
- 推送: 当你收集齐了,GAS 通过你家里的 Cloudflare Tunnel 调用 Local REST API ,一次性将整合成的 Markdown 发送到 Obsidian。
总结建议
- 偶尔操作: 用方案二(手动复制预览内容)。
- 经常操作: 建议在 Web Clipper 里专门建立一个名为
Daily Scraps的模板,文件名设为Daily_Clipped_{{date}}。这样每天抓取的多个网页都会根据日期自动归类到当天的同一个文件名下(如果插件支持重名追加)。