使用手册
本地优先的网页变化提醒扩展(Chrome / Edge)
共 17 章一、快速入门
风吹页动(PageTremor)是一个用于追踪网页内容变化的 Chrome/Edge 扩展。定时读取指定网页、RSS 源或 JSON 接口,与上次内容做 diff 后通过桌面通知、声音或 Webhook 提醒你。
典型工作流:
- 在扩展设置页新建任务,填写名称、URL 和监测类型。
- 为 HTML 任务写 CSS/XPath 选择器(或用元素拾取器点选);RSS 任务留空;API 任务填 JSONPath。
- 可选:配置过滤规则、获取后预处理、通知渠道、调度计划。
- 保存任务,扩展按检测间隔自动读取;每次读取都会与上次快照 diff,有变化即发通知。
- 随时打开日志中心查看任务检测日志、通知日志、诊断日志。
首次使用确认
首次打开设置页会依次弹出三步确认:合法使用 → Webhook 外发 → AI 外发。每一步点"我已知晓并同意"进入下一步;三步未全部确认前,下次打开设置页会再次展示。确认记录仅保存在本机浏览器。
二、任务基础配置
名称与 URL
任务名称:任意字符,最长 80 字,用于在任务列表、通知标题、日志里辨认。同名任务允许(不做唯一性校验),但推荐用带业务含义的短名(如 某商品价格 / 某博客 RSS)。
URL:必须以 http:// 或 https:// 开头,最长 2048 字符。RSS 支持 RSS 2.0 / Atom;API 支持返回 JSON 的 HTTP 端点。
监测类型(HTML / RSS / API)
- HTML:读取网页 HTML,按选择器提取内容后 diff。适用于绝大部分网页。
- RSS:解析 RSS 2.0 或 Atom feed,抽取每条条目的标题、链接、描述。
- API:请求返回 JSON 的 HTTP 接口,用 JSONPath 提取字段后 diff。支持 GET 与 POST(可配自定义请求头做鉴权、请求体),也能监测需要登录态或鉴权头的接口。
选择器(CSS / XPath / JSONPath)
HTML 任务可用 CSS 或 XPath,通过任务编辑区顶部单选切换:
- CSS 选择器:如
.article-title、#main .price、div[data-testid="price"]。 - XPath 选择器:如
//div[@class="price"]、//*[@id="content"]//p[1]。 - 多个选择器用换行分隔,每一行是一个独立选择器,读取时按顺序编号"选择器 1"、"选择器 2"...结果拼接。
API 任务用 JSONPath:
- 如
$.data.items[*].title、$..price。 - 点击"JSONPath 拾取器"可以粘贴示例 JSON 后点击字段自动生成路径。
检测间隔
支持天 / 时 / 分 / 秒组合,最低 1 秒。实际由浏览器定时器调度,会漂移几秒到十几秒;「最低可用间隔」依浏览器而定——开发模式(未打包加载)可接近配置值,安装打包版会被钳到约 30 秒,任务很多时还会受性能模式排队影响(见「十、更多设置 · 性能模式」)。RSS/API 任务建议不低于 15 分钟;HTML 任务视目标站点对访问频率的容忍度自行取值(建议不低于 5 分钟)。
任务管理操作
- 启停与删除:任务条目右侧的开关切换启停(已失效任务不能直接启用);条目上的"×"按钮直接删除该任务。
- 批量操作:点任务列表上方"批量"按钮进入批量操作模式(按钮变为"完成(N)"),勾选任务后用"批量操作菜单"执行:删除任务、批量开启、批量暂停,以及批量添加/删除匹配规则、排除规则、Webhook 链接(多条内容可换行或用英文逗号分隔)。
- 任务快捷复制 / 粘贴:在任务条目上右键打开菜单。"复制配置"可勾选配置组后复制,共 9 组:获取参数、调度、分组归属、通知、过滤规则、获取前预处理、获取后预处理、Diff 稳定化、AI 配置;在另一任务上"粘贴配置"覆盖所选配置组。任务名 / URL / 选择器 / 启停状态不会被复制;剪贴板在浏览器重启后清空。
- 凭据提醒:勾选"通知"组复制时会弹窗提醒——所选"通知"配置包含 Webhook 地址等敏感凭据(可能内嵌机器人 token),导出内容将写入剪贴板,请妥善保管、勿转发给不信任的对象。
- 未保存修改:任务分组管理存在未保存修改时,页面会标注"(有未保存修改)";此时执行批量操作会提示先点"保存全部"。
- 切换任务保持页签:在任务编辑视图内切换另一任务时保持当前页签(如停在"通知配置"就仍在"通知配置");仅从其他视图首次进入任务时回到"任务编辑"页签。
- 自动刷新:点"立即检查"后无需手动刷新,历史面板会随检测结果自动更新。
三、元素拾取器
不用手写选择器,到网页上点选元素自动生成。有两条拾取入口:任务编辑页的"拾取"按钮与 Popup 弹窗的"🎯 拾取"。
任务编辑页拾取
在任务编辑区点击"拾取"按钮(获取前预处理每行动作的"拾取"同理),会打开目标网页并进入拾取模式:鼠标移到元素上高亮,点击生成对应 CSS/XPath 并回填到选择器输入框。
- 拾取器只对 HTML 任务可用,且需先填写有效 URL。
- 按
Esc可取消拾取。 - 拾取生成的选择器是"最短唯一路径",命中稳定性一般,遇到动态类名可能失效;建议保存后回来微调。
- 支持已授权的 iframe:iframe 内会显示紫色的"iframe 元素拾取器"提示条,成功提示为"已拾取 XPath/CSS 选择器(支持已授权 iframe)"。跨域 iframe 需其自身来源也在授权范围内;
chrome://等浏览器内部页与禁止注入的页面无法拾取。
Popup 弹窗拾取
打开要监测的网页,点浏览器工具栏弹窗中的"🎯 拾取"按钮,直接在当前页面点选元素创建任务,适合快速建任务。
- 进入拾取后页面顶部提示"移动鼠标高亮元素,点击选择,按 Esc 取消"。
- 结果面板"已选择元素(N 个)"展示:元素路径(popup 拾取默认生成 XPath,多个选区用
|合并;面板可手动切换 CSS)、元素内容预览、"所属分组"(Pro)。 - 面板按钮:"保存"创建任务并打开任务编辑页;"增加选区"继续点选;"撤销选区"移除上一个选区(至少保留一个);"预处理"入口请在任务编辑页配置;"放弃选择"退出。
- 创建时自动查重:已存在相同任务会直接打开已有任务;与已有任务选择器重复会给出提醒。
- 支持 iframe 内元素拾取(主页面与 iframe 均可点选)。
站点访问授权
扩展默认只拥有通知渠道所需域名与本地地址的权限;读取或拾取其他网站前会按需申请站点访问权限(浏览器原生授权框,首次会请求"在所有网站上",也可以只允许当前站点)。
- Popup 拾取被拒:"任务仍可创建,但后台检测会失败;可在任务编辑页重新保存并同意授权"。
- 保存任务被拒不拦截:"任务已保存,但未获得网站访问授权:后台检测会失败。重新保存并同意授权(可只授权该网站)即可恢复。"
- 设置页拾取/预览被拒则会拦截并给出同样指引。
- 更多说明见"十五、站点权限与授权"。
四、过滤规则
过滤规则用于判断"这次获取到的内容是否值得发通知"。有两组:匹配规则(同时满足才通知)和 排除规则(命中任一就不通知)。
匹配规则(AND)
多个条件全部命中才算通过。空规则表示不做匹配过滤(所有变化都发通知)。
例:添加条件"包含"→ 价格,表示本次变化内容里出现"价格"才通知。
排除规则(OR)
任一条件命中就丢弃这次通知。适合过滤广告、时间戳、无关字段等噪声。
例:添加条件"包含"→ 广告,内容里出现"广告"二字的变化不再通知。
所有条件类型
| 操作符 | 用途 | 需要值 |
|---|---|---|
| 包含 / 不包含 | 字符串子串匹配 | 是 |
| 等于 / 不等于 | 整段字符串完全相等 | 是 |
| 正则 / 反正则 | JavaScript 正则,未指定标志时默认非全局 | 是(正则表达式) |
| 大于数字 / 小于数字 | 提取首个数字后比较 | 是(数字) |
| 非空 | 本次读取内容不为空即通过 | 否 |
| 数字变大 / 变小 | 与上次读取的数字比较 | 否 |
| 新增数量大于 / 减少数量大于 | diff 后的行级新增或减少行数超过阈值 | 是(数字) |
AI 语义过滤 Pro
普通规则通过后,可选调用你配置的 AI 服务(DeepSeek / OpenAI / 火山方舟 / 任意 OpenAI 兼容端点),让 AI 判断本次变化是否值得打扰你。AI 只做"发不发"的决定,不会改写通知正文或获取内容。
前置条件
- 在"全局设置 → AI 服务商配置"中为本方案选择「API 协议」、填写「Base URL(根地址)」与 API Key,并在「模型列表」里添加至少一个模型 ID(可点「发现模型」勾选导入)。根地址只填到协议前缀,例如火山方舟 Agent Plan 填
https://ark.cn-beijing.volces.com/api/plan/v3、OpenAI 填https://api.openai.com/v1,不要带/chat/completions。 - 建议选用 lite 档模型(如 gpt-4o-mini / deepseek-chat / doubao-lite),语义过滤是轻量分类任务,用大模型会显著增加耗时和费用。若使用思考型模型(如 deepseek-v4 系列),请在该模型条目上勾选「推理模型」,过滤会自动分配更大的输出预算(否则可能因输出被截断而判定失败)。
- 启用需要 Pro 权限;Free 版仅展示入口。
启用与配置
在任务编辑页的"过滤规则"面板底部找到"AI 语义过滤"卡片,打开开关后填写:
- 关注条件(自然语言):告诉 AI 你关心什么变化。例如"只在出现降价、中标、库存恢复、报名截止时提醒"。留空则不过滤特定主题。
- 通知价值目标(自然语言):告诉 AI 什么是高价值通知。例如"通知应具有高信息价值,避开广告、时间戳、重复、导航噪声"。
以上两项至少填写一项。
阈值与参数
- 最低价值分数(0-100):AI 给每次变化打 0-100 的价值分,低于此值视为无价值不通知。默认 60。注意:当 AI 判定重要等级为 high 时可突破该分数门禁,避免关键状态翻转被阈值卡住;若希望严格按分数拦截,请同时把"最低重要等级"设为"高"。
- 最低重要等级:AI 判定重要等级(低 / 普通 / 高),低于所选等级不通知。默认"普通"。
- 输入范围:送给 AI 的内容范围——仅新增内容(最省 Token)、变化摘要(推荐,平衡效果与 Token)、完整内容。
- 最大输入字符数:超长内容截断,200-20000,默认 4000。
- 截断策略:智能(优先保留新增内容和前后少量上下文)、从头保留、从尾保留。默认智能。
- 新增模式附带删除摘要:输入范围为"仅新增内容"时,额外附一段删除内容摘要,避免漏掉"下架/售罄/名额归零"这类关键信号。默认开启。
置信度与噪声
- 最低置信度(0-100):模型自评置信度低于此值时,直接抑制本次通知(属于门禁判定,不按失败策略处理,也不会触发失败告警)。默认 60;设为 0 表示关闭此门禁。
- 噪声分数阈值(0-100):AI 判断噪声可能性(广告、重复、模板化内容等),当噪声分达到或高于此阈值(≥)且置信度达标时直接抑制不通知。默认 70;设为 0 表示关闭。
失败策略
AI 请求失败(网络错误、超时、API 返回错误、余额不足等)时的处理方式:
- 按普通规则发送(默认):AI 不可用时等同于 AI 过滤未启用,正常发送通知。
- 降级到原始通道:AI 不可用时,只向原始 Webhook 发送(不发 AI 后 Webhook),并附带
aiFallback=true标记。 - 不发送:AI 不可用时完全抑制通知,避免误打扰。
AI 调用失败时,若勾选「同时发到原 Webhook」,原 Webhook 照常发送;同时会向 AI 后 Webhook 额外发送一条独立的纯文本失败警告,可在通知日志中查看;同一错误 10 分钟内不重复告警。
决策缓存
- 启用决策缓存:相同输入在缓存有效期内复用上次 AI 判定,不重复调用,节省 Token。默认开启。
- 缓存有效期(分钟):默认 1440(24 小时);设为 0 表示不读缓存但仍写入。修改阈值、关注条件或提示词版本后缓存自动失效。
通知通道与 AI 后 Webhook
AI 语义过滤通过后,通知可以发往与常规通道不同的 Webhook 地址:
- AI 后 Webhook:在通知配置页填写,仅当 AI 判定通过时向这些地址发送。每行一个 URL。该区块仅 Pro 版可见,未购买 Pro 时不显示。
- 同时发到原 Webhook:开启(默认)时,普通过滤通过后先向原 Webhook 发送一次留档,AI 通过后再向 AI 后 Webhook 发送;关闭时只在 AI 通过后发往 AI 后 Webhook。两边 URL 重叠时自动去重。
- 桌面通知和声音:AI 通过时才发送;AI 未通过时不触发。
- @人(可选):Webhook 通知可 @ 指定成员——手机号用于钉钉/企业微信,飞书填 open_id;支持 @所有人。
- 企业微信格式限制:企业微信仅「纯文本」格式支持 @ 提醒;markdown 格式即使配置了 @人,也不会触发提醒,请改用纯文本格式。
- 钉钉 markdown 格式下 @手机号可能受客户端脱敏星号与 markdown 强调语法影响,建议改用纯文本格式。
- 自定义模板限制:启用自定义 Webhook JSON 模板后,模板会接管整个请求体,@人配置不会生效。需要 @人 请使用内置发送格式,或在模板内容中自行包含 @ 信息。
AI 摘要
AI 摘要(brief)默认开启(可在 AI 语义过滤面板关闭);当 AI 判定通过时,内置三渠道格式与桌面通知正文末尾会自动追加一行「🤖 摘要:…」;自定义模板不会自动追加,请在模板中使用 {{aiBrief}} 变量。
试跑
配置完成后可以点击"用最近快照试跑"按钮,使用该任务最近一次获取的 diff 结果实际调用一次 AI,展示价值分数、重要等级、置信度、噪声分、判定理由、标签、Token 用量和耗时。试跑结果不写入缓存、不影响真实通知。试跑结果旁可直接标记「该推 / 不该推」,反馈会用于后续判定校准(与历史面板反馈等效)。
如果试跑报错:"请先在全局设置中填写 AI 服务商配置"——先完成全局设置;"任务尚未产生变化快照"——先手动运行一次任务。
日志与历史
- 每次 AI 过滤在日志中心以
ai_filter步骤记录,展示是否调用了 AI、耗时、输入字符数、判定结果、错误信息、缓存命中情况。 - AI 失败后降级到原始通道时会额外记录一条警告日志。
- 如果检测到疑似 Prompt Injection 攻击信号,日志中会列出信号标签(仅诊断,不会上报)。
注意事项
- AI 过滤在普通过滤规则通过之后才执行;如果普通过滤已经排除了某次变化,AI 不会被调用。
- 全局设置的"并发上限"和"最小请求间隔"用于控制 AI 调用频率:默认并发 2、最小请求间隔 800ms;云端模型建议并发不超过 3,避免触发限速。
- 所有 AI 请求内容会自动脱敏(Cookie、Authorization、API Key 等敏感头会被掩盖),不会发送给 AI 服务商。
- API Key 仅存储在本地浏览器 storage 中,不会随任务配置复制、通知或日志外发。
五、获取前预处理
在读取网页 之前 执行的浏览器 DOM 操作,用于处理需要点击、滚动、填表才能显示内容的页面。点"添加获取前动作"新增一行,每行选择一种动作类型:点击元素 / 填入文本 / 选择下拉项 / 滚动 / 删除节点 / 等待。
字段联动
动作类型不同,这一行显示的输入框也不同:
- 类型:点击元素、填入文本、选择下拉项、删除节点需要选 CSS 或 XPath;滚动、等待没有"类型"字段。
- 选择器:上述四类动作必填;滚动显示为"选择器(可选)",留空滚动整个页面。
- 值输入框:仅三类动作有——填入文本显示"填入内容";选择下拉项显示"选项值"(填选项的 value 或序号);滚动显示"滚动位置(px)"(如
800,留空滚到底)。 - 延迟:执行本步后额外等待的毫秒数;"等待"类型这里显示"等待毫秒"(如
1500即等 1.5 秒)。 - 拾取:选择器输入框右侧的"拾取"按钮,到页面上点选元素自动填入(仅 HTML 任务可用,不会覆盖主选择器)。
- 删除:移除这一行动作。
六、获取后预处理 Pro
获取后预处理是本扩展最灵活的功能:在读取完 HTML/JSON 后,用"处理块 + 步骤"的方式对内容进行清洗、变换、计算、拼接。本功能需要 Pro;Free 版仅展示入口与说明。
预处理区顶部有"忽略预处理警告"开关:默认关闭,步骤出现警告时会在通知开头拼接警告块;开启后完全不拼接,任务日志仍保留警告。
处理块结构
一个"处理块"是一个独立作用域,包含:
- 块名称:只允许中文、英文、数字、空格、下划线和短横线;重复自动加序号。每个处理块还有一个固定编号变量名
{block1}、{block2}...按创建顺序自动分配。 - 输入来源:决定这个块的输入是什么(见下节)。
- 启用/禁用:不启用的块不参与执行。
- 步骤列表:块内可以有多个步骤,按顺序对输入依次变换,得到"块输出"。
所有块的输出可以在"最终内容模板"里通过 {块名} 或 {block1} 这类编号变量引用,拼成最终结果。
快捷添加处理块 / 步骤
- 快捷添加:每个处理块的步骤列表末尾有
+按钮,点击即在块末追加一个新步骤;鼠标移到处理块右缘或下缘会出现条状+按钮,点击即在末尾追加一个新处理块。悬停与追加操作保持稳定,无需额外设置。
输入来源
处理块"输入来源"下拉选项:
| 选项 | 行为 |
|---|---|
| 合并原始全文 | 整段读取结果(HTML/RSS/JSON) |
| 所有选择器原始结果 | 每个选择器结果独立跑一遍块内步骤,输出用双换行拼接;可用 {块名.selector1} 或 {block1.selector1} 引用子输出 |
| 指定选择器原始结果 | 只取第 N 个选择器结果 |
| 匹配选择器文本的原始结果 | 该项已隐藏;仅为兼容旧任务保留 |
| 指定处理块结果 | 用"块变量表达式"引用其他处理块的输出(下节详述) |
注意:任务只有 1 个选择器时,"所有选择器原始结果"与"指定选择器原始结果"两项置灰不可选(需多选择器才可选);"匹配选择器文本的原始结果"仅为兼容旧任务保留,界面已隐藏。
所有步骤分类
添加步骤时先点"分类"再点"功能"两级选择。分类共五组,括号内为该组的"功能"列表(以界面为准):
- 替换/提取(正则替换、正则提取、替换文本、关键词区间替换/提取、只保留包含关键词的行、提取 URL、提取邮箱、提取手机号/电话、提取价格文本、提取百分比、提取日期时间、提取数字、提取第 N 行到第 M 行、提取第 N 字到第 M 字、按分隔符取第 N 段)
- 格式化(时区转换、HTML 转 Markdown、Markdown 转纯文本、JSON 数据处理、保留小数、单位换算、大小写转换、全角/半角转换、HTML 实体解码、URL 百分号解码、相对链接补全为绝对链接、URL 归一化、懒加载图片修复、段落首行缩进、图片链接处理、普通链接处理)
- 计算(数字四则运算、数字聚合、表达式计算)
- 删除/移除(正则删除、删除包含关键词的行、删除段落、按选择器移除、删除所有空行、去除重复行、移除 HTML 标签、移除 Markdown 链接)
- 其他(内容拼接、行排序、过滤广告、裁剪前后空白、合并多余空行、合并多余空格 / Tab、限制最大长度)
替换/提取类步骤
正则替换
字段:正则表达式、替换文本、标志(默认全局匹配)。命中所有匹配后替换。安全保护:模式长度上限 500,匹配数上限 10000,禁止形如 (x+)+ 的灾难性回溯。
正则提取
字段:正则表达式、标志。返回所有命中项,用换行拼接。
正则删除
与正则替换等价但替换文本固定为空。未命中时保留原文并给出警告。
替换文本
字面字符串替换(不解析正则)。
关键词区间替换/提取
字段:关键词 1、关键词 2、关键词 1 第 N 次命中、是否保留两端关键词、模式(替换/提取)、替换文本。从关键词 1 命中位置向后找关键词 2 第一次出现,对区间做替换或提取。未命中时保留原文并写警告。
格式化类步骤
时区转换
把输入文本里的日期时间在时区间搬移;也可选择顺便格式化为 YYYY-MM-DD HH:mm:ss。共三个子选项:
- 输入时区(可留空):把输入文本中无时区标记的时间当作该时区的 wall-clock 时间。留空时先按 UTC 解读(方便处理 ISO 字符串无 Z 后缀的场景),失败后再回浏览器本地时区。含时区标记(如
2026-07-01T09:00Z、2026-07-01 09:00+08:00)时忽略本设置。 - 输出时区(必填,新建时默认填
Asia/Shanghai):目标时区名。时区参数已覆盖全球主流命名(Asia/Shanghai、America/New_York、Europe/London等),下拉可搜索英文和中文,也可手动填写浏览器支持的 IANA 时区;非 IANA 写法与留空都会在保存时被拒绝。 - 日期标准化(默认关闭):开启后把结果重新格式化为
YYYY-MM-DD HH:mm:ss;关闭时该步骤原文直通(相当于跳过)。
典型用途:把 API 返回的 2026-07-01T09:00Z 转成上海时区、把 3 小时前/昨天/2 天前 等相对时间转成标准时间戳。
JSON 数据处理
操作模式共 8 档:字段保留、字段重命名、字段排序、数组排序、数组去重、转 Markdown、转 Markdown 表格、转纯文本。数组排序/数组去重可填 JSONPath(可选,如 data.items;留空 = 把整个输入当作数组),用于处理嵌套数组;输入不是合法 JSON 时保留原文并给出警告。
数字规范化(用两步实现)
预处理没有独立的「数字规范化」步骤:先用「提取数字」(默认开启规范化:去千分位、统一小数点、去货币符号)取数,再按需加「保留小数」控制小数位;欧洲格式(1.234,56)与标准格式(1,234.56)自动识别。
单位换算
按"源单位->目标单位"格式换算(例如 g->kg、万元->元、m->km),可从下拉建议选择,也可自定义。支持四大类:
- 金额:
元 / 十元 / 百元 / 千元 / 万元 / 亿元 - 质量:
mg / g / kg / t(含中文别名毫克 / 克 / 千克 / 吨) - 长度:
mm / cm / m / km(含中文别名毫米 / 厘米 / 米 / 千米 / 公里) - 存储:
B / KB / MB / GB / TB / PB(以 1024 为基数)
保留小数位(可选):
- 填写后:完全按填写位数四舍五入(例
2→ 保留 2 位)。 - 留空时:放大方向(小单位→大单位,如
万元->元、kg->g)默认保留 2 位小数;缩小方向(大单位→小单位,如元->万元、B->KB)自动保留 2 位有效数字,避免小数被直接四舍五入为 0。
输出格式(可选,默认「数字+单位」):
- 数字+单位:输出末尾附加目标单位,例如
260000.00 元。 - 仅数字:仅输出纯数字,例如
260000.00,方便后续步骤继续参与计算。
例如:26 元 按 元->万元 得 0.0026 万元;26 万元 按 万元->元 得 260000.00 元。
提取数字
选项:规范化数字(默认开启,去千分位、统一小数点、去货币符号)、百分号转小数(默认关闭,开启后把 50% 转成 0.5)。多个数字用换行分隔输出。
大小写转换
子选项:全部大写 / 全部小写 / 单词首字母大写(Title)/ 句首大写。Title 与句首只作用于英文,中文不受影响。
全角/半角转换
方向:全角→半角、半角→全角。范围:ASCII 字母/数字/可视符号 + 全/半角空格。中文标点(。、,!?)不转换。
HTML 实体解码
把 &、"、中 等还原为原字符。
URL 百分号解码
对整段文本做 URL 解码;异常字符串保留原文并警告。
相对链接补全为绝对链接
以任务 URL 为基础地址,把 HTML 的 src/href/srcset 及 Markdown 相对链接补全。协议相对 //、mailto:、javascript:、锚点 # 保留不变。
URL 归一化
剥离跟踪参数(内置 utm_* / gclid / fbclid / spm / share_source 等)与锚点(# 之后的片段);可选小写化 host、去默认端口、去尾斜杠。可通过"额外跟踪参数"字段扩充名单。
懒加载图片修复
把 data-src/data-original/data-lazy-src 等常见懒加载属性写回 src;data-srcset 系列写回 srcset。属性清单内置不开放自定义。
段落首行缩进
子选项:全部段落 / 单个段落 / 多个段落(后两者填段落序号,如 1、1,3,5、2-4);缩进字符(半角空格 / 全角空格 / Tab);缩进字符数;方向(增加 / 减少)。只作用于段落首行。
Markdown 相关
HTML→Markdown 转换、纯链接处理(提取文本 / 提取 URL / 删除 / 保留 / 转 Markdown)、图片链接处理(同上)、去 Markdown 链接等。
隐藏元素剔除
「HTML 转 Markdown」与「移除 HTML 标签」默认剔除隐藏元素:跳过带 hidden 属性、display:none 或 visibility:hidden 的元素及其文本/链接;可在步骤参数取消勾选「剔除隐藏元素」以保留这些内容。原始抓取内容(rawContent)不受影响。
删除/移除类步骤
- 正则删除:见"替换/提取"节。
- 删除包含关键词的行 / 保留包含关键词的行:按行过滤。
- 按选择器移除:先选"选择器类型"(XPath 默认 / CSS / JSONPath),再填选择器字符串。XPath 与 CSS 在 HTML 上用
DOMParser解析后删除命中元素;JSONPath 在 JSON 上删除命中字段或数组项。 - 去除空行 / 去除重复行 / 折叠连续空行 / 折叠连续空白:按行清洗。
- 去除 HTML 标签 / 去除 Markdown 链接:标签清洗。
- 删除段落:按段落关键词删除——包含该关键词的段落整体删除(每步填一个关键词;留空会保留原文并警告)。
- 限制最大长度:截断到 N 字符(默认 50000)。
- 提取字符范围 / 提取行范围:按起止序号裁剪。
- 按分隔符取第 N 段:字段有分隔符和段号。
计算类步骤
计算类专门处理"从文本中提取的数字"。
输入来源 / 常量两个多行输入框支持引用其他处理块结果(禁止引用自身)。鼠标点入任一个时会弹出"可插入变量"悬浮列表,点击自动追加 {block1} 这类编号变量,追加后可手动拼接分隔符(竖线/分号/换行)。
数字四则运算
字段:运算符(+ - × ÷ % ^)、常量(可以直接填数字,也可以填含变量的表达式如 {block1}+3)、常量所在侧(左 / 右)、小数位数(默认 -1 = 跟随输入精度)、分隔符偏好(自动 / 换行 / 空白 / 分号 / 竖线;中英文逗号按千分位处理,不再作为分隔符)、严格输出长度(默认开)。
输入侧长度 = 1 与常量侧长度 = 1 时广播;两侧同长度按位对齐。任一侧为空 → 该位输出空。除法或取模的常量为 0 → 保存拒绝。
数字聚合
字段:聚合运算符(求和 / 平均 / 最大 / 最小 / 计数 / 中位数 / 极差)、分隔符偏好、小数位数。无数字时保留原文并警告(计数除外,无数字时输出 0)。
表达式计算
字段:表达式(如 ({n1}+{n2})*2)、小数位数。变量 {n}、{n1}、{n2}... 引用文本中的数字。支持函数 abs / round / floor / ceil / min / max / sqrt / pow。长度上限 200,运行超时 100ms。保存时静态检查常量除零。
内容拼接
用模板拼接其他处理块的输出,如 标题:{block1}\n价格:{block2}。变量语法与最终内容模板一致。焦点在模板文本框时会弹出"可插入变量"悬浮列表,点击自动追加 {block1} 这类编号变量。安全扫描:命中 <script>、javascript:、内联事件属性、eval() 等会拒绝执行。
其他类步骤
行排序
子选项:字母升 / 降序、按行首数字升 / 降序、按行长度升 / 降序;区分大小写;忽略行首尾空白。无排序依据的行排到末尾;结果顺序未变时发出警告。
过滤广告
按行移除常见广告与推广内容:删除以 Cookie、隐私、订阅、关注、扫码、下载、安装、登录、注册、广告、推广、sponsor、advert 等开头的行(中英文,不区分大小写),空行与正常内容原样保留。规则内置,无需填写参数,适合在通知前清掉页面里混入的推广行。
变量引用语法
在最终内容模板、内容拼接模板、块变量表达式、计算步骤的输入来源与常量里,都可以用变量引用其他处理块的输出。两种写法效果一致:
- 编号变量(推荐,与可插入变量弹窗一致):
{block1}:整个块输出{block1.selector1}:所有选择器原始结果模式下的第 N 个子输出{block1.part1}:多段分隔模式下的第 N 段
- 块名变量(旧写法,仍然支持):
{块名}:整个块输出{块名.selector1}:同上{块名.part1}:同上
{block1}:与"可插入变量"弹窗展示一致,改块名不会影响引用。指定处理块结果与多段分隔
处理块"输入来源"选择 指定处理块结果 时,会出现"块变量表达式"输入框。
单段模式(不含 |)
- 允许:单个变量
{block1};多变量拼接{block1}{block2};变量间空格{block1} {block2};子引用{block1.selector1}、{block1.part2}。 - 禁止:字面文字(
{block1}文本{block2})、纯空格、无变量引用、换行/Tab。 - 违规时输入框实时红边框,保存拒绝并列出原因。
多段模式(含顶层 |)
- 每段必须严格是
{key};不允许字面文字、紧挨多变量、空段。 - 运行时每段独立跑一遍块内步骤,输出用双换行拼接。
- 下游可用
{当前块.part1}引用第 N 段的输出。 - 预览面板会以浅紫色 part 卡片单独展示每段输出。
可插入变量弹窗
焦点在块变量表达式输入框时会弹出所有其他块的快捷插入列表,一律显示 {block1}、{block2} 这类编号变量;点击自动追加。点击输入框、弹窗内部、页面滚动都不会关闭;点击其他区域才关闭。
最终内容模板
所有块跑完后,用最终内容模板把各块输出拼成"最终内容",作为通知正文和 diff 基础。
模板可以是纯文本 + 变量,例:标题:{block1}\n价格:{block2}\n更新时间:{block3}。
预览面板
每个处理块下方点"展开预览 / 收起预览"打开"处理块预览",展示:
- 原始输入:块拿到的输入内容(对多段模式是每段解析后的输入用双换行拼接)
- 块输出:跑完所有步骤的输出
- 子输出卡片:
- 所有选择器原始结果模式:蓝色边框的"选择器 N 子输出"卡片,含选择器串、命中状态(已命中 / 未命中)与子输出
- 指定处理块结果 + 多段分隔模式:浅紫色边框的
part N: 表达式卡片,只显示子输出
- 预览异常:切到"计算"分类后如果输入不是纯数字会给出错误提示,避免整页白屏
在"最终内容模板"区点"测试最终内容",用最近一次获取结果直接预览各块输出拼接后的最终内容。
七、通知配置
入口:任务编辑页"通知配置"tab。这里决定检测到变化后,用什么方式第一时间告诉你。渠道互相独立,可以同时开启;每个渠道都是一张开关卡片,点"开 / 关"即可启用或停用。
通知渠道总览
- 桌面:变化时通过系统通知通道弹出桌面通知。适合自己盯页面、不想错过任何变化的场景。
- 声音:检测到变化时真实播放提示音(默认内置音;可在通知配置里填 https:// 音频地址或 / 开头的扩展内路径)。适合把页面挂在后台、只听声不看屏的场景。播放结果记录在通知日志(sound 条目)。
- Webhook:把变化消息发送到自定义 URL,内置支持钉钉、企业微信、飞书、Telegram 与通用 JSON(Slack 等其他平台走通用 JSON 格式)。适合在手机上收提醒(通过群)、团队共享与留档;新手推荐先配这个,见下节四步配置。
- AI 后 Webhook(Pro):只在"AI 语义过滤"判定值得通知时才发送的另一组 Webhook 地址,与普通 Webhook 互相独立,详见本章"AI 后 Webhook"小节。
Webhook:新手四步配置
Webhook 听起来复杂,其实就一句话:把一个"机器人地址"粘贴进来,扩展检测到变化时会向这个地址发一条消息,你的钉钉 / 企业微信 / 飞书群里就能收到。
- 拿到机器人地址:在钉钉、企业微信或飞书的群里添加"自定义机器人 / 群机器人",平台会生成一个 Webhook 地址——一条以
https://开头、末尾带密钥参数的链接,整条复制。Telegram 用 @BotFather 创建机器人后拼出api.telegram.org开头的地址;自建服务任何能接收 POST 请求的 URL 都可以。 - 粘贴地址:把 Webhook 开关卡片切到"开",把地址粘进"Webhook URL(每行一个)"输入框;多个地址一行一个,通知会同时发给每一个。
- 点"测试 Webhook":每个 URL 逐条返回结果——成功显示"✅ 成功 (HTTP 200)",失败显示"❌ 失败 — 原因";群里应立刻收到一条测试消息,收不到就按提示核对地址是否复制完整。
- 保存并试一次:保存任务后点"立即检查",确认真实通知能正常到达。
发送时按 URL 域名自动识别平台并使用对应格式:
qyapi.weixin.qq.com→ 企业微信 markdown/text 格式oapi.dingtalk.com→ 钉钉消息,格式可在"发送格式"中选 Markdown / 纯文本open.feishu.cn/open.larksuite.com→ 飞书消息,格式可在"发送格式"中选 强调卡片(默认) / 纯文本 / 富文本(Post)api.telegram.org→ Telegram Bot 消息- 其他 → 通用 JSON POST
pagetremor,不要选「加签」(扩展目前不带签名,会返回 310000);「IP 白名单」对浏览器扩展不适用。飞书不要开启「签名校验」(会返回 19021)与「IP 白名单」;若用关键词,关键词需出现在消息正文。测试内容最长 50000 字符(超出截断),避免误触发大量真实通知。
发送内容范围
同一张"通知配置"页里还有一个"发送内容"下拉,决定每条通知的正文里放多少内容:
- 只发送新增内容(默认):只把本次新出现的行放进消息,适合盯价格、盯库存这类只关心新值的任务。
- 只发送删除内容:只把本次消失的行放进消息(对比后删掉的那部分),适合盯下架、删除、失效这类只关心少了什么的任务;若本次只有新增没有删除,正文会提示"本次变化没有删除内容"。
- 发送变化前后对比:消息里同时给出变更前与变更后的内容,适合需要一眼看出改了什么的任务。
- 发送变化后全文:推送变化之后的完整内容,适合长文页面、想看全貌时用。
这个设置只对网页(HTML)任务生效:RSS 任务固定发送新增条目,JSON API 任务固定发送变化后的内容,这两类任务选哪一项都不影响结果。
它同时决定 Webhook(含 AI 后 Webhook)与桌面通知的正文;如果填了自定义 Webhook JSON 模板,模板里的 {{content}} 变量也跟着这个设置走,而 {{diff}} / {{added}} / {{removed}} 三个变量不受影响。
举个例子:某商品价格从 ¥202 变成 ¥205。"只发送新增内容"的消息里只有新增那一行(¥205);"只发送删除内容"只在有内容消失时才有输出,比如某行"库存:12"被删掉,消息里就只有那一行旧内容;"发送变化前后对比"会同时显示变更前 ¥202 与变更后 ¥205;"发送变化后全文"则推送变化后的完整内容。
发送格式与自定义格式
不确定怎么选?保持默认格式直接用,先用"测试 Webhook"确认能收到消息,再考虑自定义。
"发送格式"区为企业微信、钉钉、飞书分别提供格式下拉:
- 企业微信格式:Markdown / 纯文本。
- 钉钉格式:Markdown / 纯文本。
- 飞书格式:强调卡片(默认) / 纯文本 / 富文本(Post)。
pagetremor。扩展会在每条钉钉消息末尾自动附上该关键词(已在长度上限里预留固定字符,正文再长也不会把它挤掉);不设置会被钉钉以"关键词不匹配"拒收。Telegram 与其他自定义平台使用内置消息或通用 JSON,无需选择格式。
"自定义 Webhook JSON 格式"区可为企业微信、钉钉、飞书与自定义 Webhook 分别填写 JSON 模板:留空时使用上方内置格式;填写后该平台直接按你的 JSON 模板发送。变量请写在 JSON 字符串值里,展开时会自动做 JSON 转义;未知占位符会原样保留,请核对变量名;不需要的占位符请手动删除(已知变量正常替换,JSON 仍保持合法)。
常用变量(点"查看可用变量"看全部):{{title}} / {{displayTitle}} / {{truncatedTitle}}(标题)、{{content}}(正文)、{{sourceUrl}}(来源链接)、{{timestamp}} / {{isoTime}} / {{localTime}}(时间)、{{diff}} / {{added}} / {{removed}}(变化内容)、{{translatedContent}} / {{translatedAdded}}(AI 翻译结果)、{{aiBrief}} / {{aiValueScore}} / {{aiImportance}} / {{aiLabels}}(AI 语义过滤产物)。
{{aiBrief}}、{{aiValueScore}}、{{aiImportance}}、{{aiLabels}} 等 AI 变量仅在「AI 后 Webhook」通道有值;原 Webhook 通道为空串。{{var}} 这样双花括号的形式;写成单花括号 {var} 不会被替换、会原样直发到群里。保存任务时如果检测到疑似单花括号误写,扩展会弹出一条不阻断保存的提醒并列出可疑变量名,请照提示改回双花括号。自定义 Webhook(通用 JSON)示例——字段名可按你的接收端自行定义:
{
"title": "{{displayTitle}}",
"content": "{{content}}",
"url": "{{sourceUrl}}",
"time": "{{localTime}}"
}
pagetremor。三家可直接粘贴的模板示例(变量替换后发送):
企业微信:
{"msgtype":"markdown","markdown":{"content":"## {{displayTitle}}\n\n{{content}}\n\n来源:{{sourceUrl}}"}}
钉钉:
{"msgtype":"markdown","markdown":{"title":"{{displayTitle}}","text":"### {{displayTitle}}\n\n{{content}}\n\npagetremor"}}
飞书卡片:
{"msg_type":"interactive","card":{"header":{"template":"turquoise","title":{"tag":"plain_text","content":"{{displayTitle}}"}},"elements":[{"tag":"markdown","content":"{{content}}\n\n[打开源页面]({{sourceUrl}})"}]}}
平台限制与错误回复
- 渠道长度上限:企业微信 text ≤2048 字节、markdown ≤4096 字节;钉钉请求体 ≤20000 字节;飞书请求体 ≤20KB、卡片 ≤30KB。超过时扩展按 UTF-8 字节自动截断并标注「…(内容过长已截断)」。
- 频率限制:企业微信约 20 条/分钟;钉钉约 20 条/分钟,超限封禁 10 分钟;飞书约 100 条/分钟、5 条/秒。任务多时建议拉长检测间隔,或把多个任务合并成一条通知。
- 常见错误码:企业微信
40058=markdown 超长;钉钉460101=消息过大、310000=关键词不匹配;飞书19021=签名校验、19022=IP 白名单、19024=关键词不匹配、11232=频率超限。 - 排查顺序:先点「测试 Webhook」→ 再看通知日志里的请求体/响应体 → 核对机器人安全设置 → 核对内容长度或模板 JSON。
- 错误回复判定:HTTP 状态 200 不代表发送成功——企业微信/钉钉返回
errcode非 0、飞书返回code非 0、Telegram 返回ok非 true,都按失败处理,平台返回的错误原文会记入通知日志。 - 失败原因代码:任务与通知日志会记录失败原因,如 Webhook 接口返回错误(
webhook_api_error)、Webhook HTTP 请求失败(webhook_http_error)、Webhook 发送异常(webhook_send_error)。
通知内容的安全清洗
通知正文在发送前会经过一层内置防护,无需手动开启,对正式发送、桌面通知与「测试 Webhook」同样生效:
- 广告与推广行过滤:按行移除以 Cookie、隐私、订阅、关注、扫码、下载、安装、登录、注册、广告、推广、sponsor、advert 等开头的行(中英文,不区分大小写);读取 HTML 时还会剔除 script/style/iframe 等标签,以及 class/id 含广告、侧栏、导航关键词的元素。Pro 还可用「六、获取后预处理 → 过滤广告」在更早阶段清洗。
- BASE64 内联图片不外发:页面里的
data:image/...;base64内联图不会以原图发送,统一折叠为「图片:说明」纯文本(没有说明则整段丢弃);https 图片链接转成「图片:说明 + 链接」文本,避免飞书卡片等渠道因图片语法整条发送失败。 - 恶意注入拦截:
javascript:/data:/vbscript:等危险协议链接只保留链接文字,不可点击也不执行;<script>等脚本标签与其内容不会进入通知正文;伪 markdown[x](javascript:...)同样只保留文字。 - 飞书卡片保护:强调卡片正文中的图片自动转成文字链接;若平台仍拒绝(错误码 11246/11310),扩展会自动改用富文本(Post)重发一次。降级覆盖内置格式;自定义模板里的字面图片语法不在清洗与降级范围内,请在模板里避免直接写图片语法。
- 标题不在改写范围:通知标题(默认「任务名 + 发生变化」)只做长度截断,不改写其中的内容。请避免在任务名称里粘贴网页代码、链接语法或不可信页面的文本。
AI 后 Webhook Pro
开启 AI 语义过滤的任务,通知配置页会出现"AI 后 Webhook"区块:仅当任务启用 AI 语义过滤且已通过时,向这里的 Webhook 地址发送通知(每行一个)。适合把"普通过滤就能判定"的日常消息与"AI 精选过的高价值消息"分流到不同的群。
- 同时发到原 Webhook:开(默认)——候选通知同时发送到上方普通 Webhook,保留本次变化的完整留档;关——只在 AI 判定通过后发送到 AI 后 Webhook,不再发普通地址。两边 URL 重叠时自动去重。
- 该区块仅 Pro 可见;先在"四、过滤规则 · AI 语义过滤(Pro)"完成 AI 配置,再回来填地址。
静默时间
在"静默开始""静默结束"两个时间框(HH:MM)指定每天的静默时段,期间检测仍会执行但不发送通知;静默期间产生的变化不会在静默结束后补发,请据此规划静默窗口。开始和结束必须同时填或同时空。跨零点也支持(如 23:00 - 07:00)。例:只想在上班时间被提醒,就填"静默开始 21:00、静默结束 09:00"。
八、AI 能力 Pro
AI 能力均需 Pro;AI 服务商在全局设置统一配置,供 AI 语义过滤、AI 翻译等能力共享调用。内容仅发送给你自己配置的 AI 服务商,不经过作者服务器。
AI 服务商配置 Pro
入口:侧栏"⚙️ 全局设置"→"AI 服务商"标签。Free 版只展示入口;配置需要 Pro。
- 5 个方案槽位:可分别保存不同服务商与 Key(如主力 DeepSeek、备用 OpenAI、本地 Ollama)。调用时按方案顺序 1 → 2 → 3 → 4 → 5 依次尝试,前一个方案报错、超时或达到用量硬停时自动切下一个,全部失败才最终报错。
- API 协议:OpenAI Chat Completions(
/chat/completions) / OpenAI Responses(/responses) / Anthropic Messages(/v1/messages)。协议决定请求路径与鉴权头,所以只需填根地址,不再需要手拼完整端点。DeepSeek、OpenAI、火山方舟(普通 Key / Agent Plan)、自建或代理的 OpenAI 兼容服务、以及本地模型(Ollama / vLLM / LM Studio)都通过这三类协议接入;选择本地模型时内容不出本机。 - 每个方案填写:方案命名(留空显示"方案 N")、API 协议、Base URL(根地址)、API Key(仅存于本地浏览器;不会随任务配置复制或通知外发)、模型列表、当前模型、默认上下文窗口与默认最大输出、超时(默认 15000ms)。
- 模型列表:每个模型一行,可填模型 ID、显示名、上下文窗口、最大输出,并勾选是否为「推理模型」;可增删行。列表保存在本机,离线可用。
- 发现模型:按所选协议请求该端点的模型列表,勾选后一键导入。火山方舟 Agent Plan 等端点不提供模型列表(会返回 404),此时按提示手动填写模型 ID(如
deepseek-v4.1-flash-economy)即可。 - 测试:"测试当前方案连通性"验证当前方案能否正常调用,并显示最终请求 URL,便于确认协议与根地址是否拼对;首次请求前浏览器会要求允许扩展访问该域名,未授权会提示先保存并允许访问。若返回 HTTP 401,请确认 API Key 与 Base URL 属于同一套餐端点:Agent Plan 的 Key 只能配 Agent Plan 端点(根地址 …/api/plan/v3),普通 Key 只能配平台端点(…/api/v3)。
- Token 用量硬停(每个方案独立):开启后设定统计口径(按日,次日 00:00 重置 / 按月,下月 1 日重置)与 Token 上限;达到上限该方案暂停调用,直到跨过统计窗口。
- AI 语义过滤高级参数:"并发上限"(1-8)与"最小请求间隔(ms)"控制 AI 调用频率(默认并发 2、间隔 800ms);云端模型建议并发不超过 3,避免触发限速。
AI 翻译 Pro
入口:任务编辑"更多设置"tab 的"通知前 AI 翻译"卡片(Pro,Free 版仅展示入口)。开启"通知前翻译"后,检测到变化且过滤规则通过时,先调用全局 AI 服务翻译内容再发送通知;翻译不影响 diff 判定与去重。
- 目标语言:默认留空 = 自动——内容主要是中文时自动跳过翻译(不再白花 Token),其它语言默认翻译为中文;首次开启请选择目标语言。
- 源语言:可留空由 AI 自动识别。
- 翻译范围:整段内容 / 仅新增部分 / 变化摘要。
- 最大输入字符(200-20000)与保留原格式开关。
- 结果去向:通过 Webhook 自定义模板变量注入通知(见"七、通知配置"),并保存到历史记录的"译文"标签。
译文只出现在自定义模板变量与历史记录「译文」中:内置发送格式不显示译文,需要译文请改用自定义模板,或在历史记录中查看。
AI Token 用量看板 Pro
入口:全局设置"AI 用量看板"标签(Pro),或 AI 服务商配置里的"打开 AI 用量看板"。展示近 30 天(按日)与近 12 月(按月)的 Token 用量,可按"合计"或单个方案筛选;数据仅存于本地浏览器。开启硬停的方案会显示硬停阈值瓦片;提供"刷新"与按月 / 全部清除(清除不影响硬停判定使用的独立数据桶)。
看板顶部新增「总计 / 输入 / 输出」切换:总计查看总 token,输入查看提示(prompt) token,输出查看生成(completion) token。
每个 AI 方案可分别填写输入单价 / 输出单价(元/百万 tokens),看板按「输入 token × 输入单价 + 输出 token × 输出单价」分别计算后相加,显示今日 / 本月的估算费用,仅用于量级参考;未填单价则显示「未配置单价」。旧的综合单价仍然兼容:只填了综合单价、未填分项单价时,输入与输出按同一单价计算。
历史用量若由旧版本产生(旧版本只记录总计),切到输入 / 输出可能显示「—」;新产生的用量开始具备输入与输出的拆分。
费用口径:各方案的金额先按原始精度累加,汇总后统一保留 4 位小数(不再逐方案、逐项先舍入),因此「总计」与「输入 + 输出」在拆分数据齐全时一致。若旧数据只配置了综合单价(未填输入 / 输出单价),这部分费用会回落到综合单价口径,输入 / 输出拆分视图不含该部分,此时请以「总计」为准;看板金额均属估算,仅供参考。
过滤统计与纠错反馈 Pro
任务编辑"过滤规则"tab 底部有"AI 过滤统计(当月)"折叠面板(随 AI 语义过滤使用):调用次数、缓存命中、平均价值分 / 置信度 / 噪声分、Token 输入输出,以及各门禁的命中分布(通过(已推送)、低于价值分数、低于重要等级、低置信度、高噪声门禁、AI 判定噪声、AI 判定低价值、调用失败)。
纠错反馈:历史面板中每条带 AI 判定的记录旁有"✅ 该推""❌ 不该推"按钮,点按即告诉 AI 这次判得对不对;最近的反馈会作为示例注入后续判定,用于校准。反馈变化后相关决策缓存自动失效,不会沿用旧结论;已反馈的记录显示"已反馈,将用于校准后续判定"。
九、调度
调度配置包括:
- 基础检测间隔:定义在任务编辑页,见"任务基础配置 · 检测间隔"。
- 活跃时段:可选功能。开启后填写"生效开始时间""生效结束时间"与"生效星期"(0=周日,1=周一,多个用英文逗号分隔,如
1,2,3,4,5),仅在指定时段和星期执行。 - 多时间段(Pro):"添加时间段"可配置多段"第 N 段·开始 / 结束"+生效星期(留空=不限星期),命中任一段即执行;已启用活跃时段时,单段字段作为回退保留。Free 版只展示入口。
- Cron 定时:可选功能。5 段格式:分 时 日 月 周;支持
*、*/N、逗号分隔数字,以及区间a-b与步进区间a-b/N(分/时/日/月/周各段均支持),如*/30 * * * *、5-10 * * * *(每小时 5 到 10 分)、*/2 9-17 * * 1-5(工作日 9-17 点每 2 小时)。启用后检测间隔不生效,按 Cron 时间点触发一次检测。 - 活跃时段(含多时间段)和 Cron 不能同时启用。
常用 Cron 式样:*/30 * * * *(每 30 分钟)、0 9 * * 1-5(工作日每天 9 点)、0 8,20 * * *(每天 8 点与 20 点)。
chrome.alarms 定时器转换成一次性触发,遵循浏览器最小间隔(Manifest V3 后台不能常驻,最短 1 分钟)。任务分组与分组调度 Pro
入口:全局设置"任务分组"标签(Free 版只展示入口)。分组适合把大量任务按场景统一管理:
- 分组管理:"新增分组"输入框 + "添加分组"按钮创建(回车亦可);组名在行内输入框直接修改;↑ / ↓ 调整分组顺序;"删除"分组时组内任务变为未分组,不会被删除。所有修改点"保存全部"后落盘。
- 任务归组:任务编辑页(或 Popup)的"所属分组"下拉选择,或选"+ 新建分组…"就地新建。
- 批量启停:分组卡片上"全部启用""全部停止""全部暂停"。
- 分组时间段:开"分组调度"后点"添加分组时间段",字段与任务活跃时段相同。
- 调度模式:"分组优先 · 覆盖任务自身时段"(默认:组内任务一律按分组时间段执行,分组未配置时间段时才按任务自身时段)与"混合 · 与任务自身时段取交集"(任务只在自身时段与分组时段都命中时执行,两者完全不相交则不执行)。
- 时段冲突预警:分组时间段与组内某任务的自身活跃时段完全不相交时,给出 ⚠️ 提示并说明该任务在当前模式下保存后的行为。
十、更多设置
定位滚动
HTML 任务开启后,读取时会自动打开网页,把选择器命中元素居中滚动到可视区,多选择器依次停留 3 秒。适合"不滚到位就不渲染"的懒加载网页(无限流、图片瀑布等)。
因后台标签页无法可靠触发动画帧和可见性观察,定位滚动与"激活检测页"单向联动:
- 开定位滚动 → 自动开激活检测页(如原为关,内部记录"因定位滚动而开")。
- 关定位滚动 → 仅当内部记录存在才同时关激活检测页。
- 手动切换激活检测页 → 清除该内部记录,避免误关。
强制刷新
读取时在请求头加 Cache-Control: no-cache、加时间戳查询参数,跳过浏览器和 CDN 缓存。对需要非常实时数据的任务有用,但会加重目标站点负担。
多级读取策略
扩展内置四级读取策略(L1-L4),从轻到重逐级升级:
- L1 直接读取接口(最轻量,适合无登录、无动态渲染的页面)
- L2 打开后台标签页读取渲染后的页面内容(可执行"获取前预处理"步骤)
- L3 在 L2 基础上滚动到页面底部并等待动态内容加载完成
- L4 识别页面用到的 JSON 接口并直接读取接口返回
前一级拿不到有效内容时自动升级到下一级;L2 起需要页面加载权限。若各级读取均失败且识别到人机验证、滑块、拦截页面,会按任务通知设置提醒用户手动完成验证。
性能模式(全局并发上限)
入口:设置页右上角「全局设置」→「性能」。限制「同时执行」的检测数量:任务多时其余检测自动排队(先到先跑),一个检测完成立即放行下一个。三档:
- 省电:同时最多 2 个检测,适合低配机器或笔记本续航敏感场景。
- 标准(默认):同时最多 4 个检测,覆盖绝大多数场景。
- 自定义:自填并发数 1-16,默认 8。
使用多级读取策略 L2 及以上(真实标签页渲染)的任务,每个检测占 2 个并发位;并发上限设为 1 时按 1 位执行。大批任务同一时刻到点时,排队会拉长实际检测周期(省电档 50 个任务一轮约等于 25 倍单次检测耗时),属预期行为。
内容格式化选项
本页常用开关:强制刷新、激活检测页、定位滚动、忽略 URL 跟踪参数(仅影响 diff 比较,不写回内容)。另有"忽略预处理警告"开关在任务编辑"预处理"tab(不在通知开头拼接警告块,见"六、获取后预处理")。
十一、历史记录与 Diff
每次读取都会保存一份快照到本地存储(浏览器 IndexedDB)。历史面板可以:
- 浏览过去 N 条历史;保留档位由"当前任务的快照保留策略"下拉控制:Free 固定保留最近 5 条;Pro 可选保留 200 / 400 / 1000 / 2000 条,或按总大小保留 50MB / 100MB / 500MB,或"不限制"(条数与大小二选一);更早的数据点"加载更早快照"载入
- "格式化 / 原始"切换:格式化 = 经过所有预处理和最终模板的展示内容;原始 = 未经处理的读取原文(HTML 会做安全清洗后渲染)
- "源码 / 预览"切换:源码 = 纯文本框;预览 = Markdown 渲染或安全清洗后的 HTML 渲染
- "合并原始全文":把多个选择器的读取结果合并成一段原文用于查看
- 历史对比:发生变化的记录展开后自动显示"变更前 / 变更后"左右两栏对比,两栏各自支持"预览 / 源码"切换
- Markdown 图片:预览模式下内容里的 Markdown 图片直接渲染——普通链接图片、base64 内嵌图片(png / jpg / gif / webp / bmp / avif)、图片套链接(点击可打开外层链接)均支持
- 译文查看:开启"通知前 AI 翻译"(Pro)后,内容按钮在"格式化 / 原文 / 译文"三态间循环,可查看 AI 译文(该记录未开启翻译或翻译失败时显示占位提示)
- AI 纠错反馈(Pro):带 AI 判定的记录旁可点"✅ 该推 / ❌ 不该推"校准后续判定(见"八、AI 能力(Pro)")
<script>、<iframe>、内联事件属性(如 onclick)、javascript: 协议等 17 项黑名单。仍然建议不要在 HTML 原始预览里做敏感操作。十二、日志中心
点击帮助 tab 或通知配置区里的"打开日志"按钮进入。三个 tab:
- 任务检测日志:每次读取的开始 / 结束、状态码、耗时、抽取字数、diff 结果、预处理步骤逐个结果与警告。
- 通知日志:每次通知的发送渠道、目标、耗时、返回结果(Webhook 平台响应),并记录所属任务(任务 ID / 任务名)与发送阶段(原始内容 / AI 过滤后),方便与任务日志、AI 过滤日志对照排查。
- 诊断日志:调度器、定时器、权限、扩展生命周期事件。
日志保留与历史类似:Free 各保留最近 5 条;Pro 可按条数(200 / 400 / 1000 / 2000)或总大小(50MB / 100MB / 500MB / 不限制)保留,面板随检测自动更新,更早日志用"加载更早"载入。
失败原因以「中文主原因 + 英文原因代码」形式展示:每条失败日志先给一句中文主要原因,旁边附英文原因代码;点"复制排障信息"会把两者一并复制,也可在日志工具栏按原因代码筛选。常见原因代码:
- 页面防护与验证:
waf_blocked(网站安全防护拦截)、captcha_challenge(验证码)、slider_challenge(滑块 / 拖动验证)。 - HTTP 状态:
http_403/http_404/http_5xx/http_error(目标站点返回 4xx / 5xx 状态码)。 - 网络与权限:
network_or_permission_error(网络失败或站点权限被浏览器手动限制)、no_site_permission(站点未被授权)。 - 解析与匹配:
selector_no_match(选择器没命中任何 DOM)、html_parse_failed/rss_parse_failed/api_parse_failed(内容解析失败)、rss_empty(RSS 源无条目)、jsonpath_syntax_invalid(JSONPath 表达式写得不对)、jsonpath_no_match(JSONPath 未取到数据)、api_data_not_found(接口未返回预期数据)。 - 处理与通知:
post_fetch_*_error(获取后处理动作出错)、storage_error(本地存储异常)、notification_error(通知发送异常)、unknown_error(其他未分类错误)、webhook_api_error(Webhook 接口返回错误)、webhook_http_error(Webhook HTTP 请求失败)、webhook_send_error(Webhook 发送异常)。
十三、RSS 特殊说明
- 支持 RSS 2.0 和 Atom;自动识别。
- "RSS 解析条数":默认 10 条,最大 200 条。检测间隔越长建议调大,避免一次间隔内新增超过解析条数漏检。
- 抽取字段:标题、链接、描述、发布时间。默认按发布时间倒序取前 N 条。
- RSS 条目的
link可作为获取后预处理时的基础地址(用于相对链接补全)。
十四、API 特殊说明
- 只支持
GET返回 JSON 的接口。 - JSONPath 拾取器:粘贴示例 JSON 后点击字段自动生成路径。
- API 读取结果如果是数组会自动序列化成 JSON 字符串后再走后续 diff / 过滤 / 预处理。
- 需要 Authorization / Bearer Token 的接口目前不支持(未提供自定义请求头 UI)。
- 部分页面型数据接口可用多级读取策略的 L4(JSON 接口嗅探)自动捕获,见"十、更多设置"。
十五、站点权限与授权
扩展默认只拥有通知渠道所需域名与本地地址的权限;监测其他网站按按需授权模型工作:
- 申请时机:首次创建任务或首次拾取时,浏览器会弹出原生授权框(首次默认请求"在所有网站上",也可以只允许当前站点);Webhook 地址与 AI 服务商地址也会按需逐源申请。
- 拒绝的后果:拒绝不会拦截创建任务与保存,但后台检测和拾取会失败,日志会给出处理指引——重新保存任务并同意授权(可只授权该网站),或在浏览器扩展详情把"网站访问权限"设为"在所有网站上"。
- 重新授权:重新保存任务并同意授权即可恢复;扩展更新收回授权后,下次打开弹窗会补一次授权请求。检测失败不计入页面防护连败。
若日志显示"网络或权限错误",按序排查:
- 先在浏览器直接打开目标 URL 确认能访问。
- 打开
chrome://extensions,进入本扩展详情页,检查"网站访问权限"是否被设为"点击时"或"特定网站";按需改回,或在任务编辑页重新保存并同意授权。 - 检查目标站点是否有 CORS / CSP 限制(有些站点对扩展 fetch 也会拒绝)。
- 企业网络代理可能拦截请求;换网络重试。
十六、Free / Pro 与激活
Free 版功能完整,主要限制在数量与存储:
- 任务数量:Free 最多 3 条正常任务(禁用、暂停、失败任务也计入;已失效任务不计入);Pro 不限任务数量。
- 历史与日志:Free 各保留最近 5 条;Pro 可选 200 / 400 / 1000 / 2000 条,或按总大小 50MB / 100MB / 500MB / 不限制(条数与大小二选一)。
- Pro 能力:获取后预处理、AI 语义过滤与翻译、AI 服务商配置与用量看板、任务分组与多时间段高级调度、AI 后 Webhook 双通道等。
激活与设备锁
购买支付成功后,激活码通过爱发电站内私信自动发送;未收到时在升级页点"打开兑换页"凭订单号自助补领,或按页面指引联系作者。升级页输入形如 PTM-XXXXX-XXXXX-XXXXX 的激活码,点"激活 Pro"即可解锁;同一激活码同一时间只能在 1 台设备使用。
- 设备锁:可选开启。开启后其他设备将无法用此激活码激活;换机时先在旧设备关闭设备锁,或在兑换页用"订单号 + 邮箱验证码"远程关闭设备锁。
- 7 天周期校验:授权需要定期联网验证(每 7 天一次)。连续超过 7 天未联网校验,Pro 会暂时降级为 Free:超额任务停止并标记"已失效",任务配置不受影响;恢复联网校验成功后自动恢复(也可点"立即校验"),任务状态、启停状态、已失效超额任务与所有 Pro 配置按降级快照还原。
- 授权失效:激活码被重置或在其他设备激活(授权转移)时,本机会提示授权已失效 / 已转移,需重新激活。
十七、常见问题
Q:为什么保存新任务后立刻就有一条"新增"通知?
A:不会。首次保存时会立即读取并保存"初始快照",不发通知。真正 diff 从下一次读取开始。
Q:通过外部方式写入的任务,第一次检测就发了整页通知?
A:是预期行为。只有通过设置页保存的任务才会自动建立"初始快照";外部直写的任务没有历史基线,首次读取会把整个页面视为"新增"并发送一次通知,从第二次读取起恢复正常增量对比。
Q:为什么设了 5 分钟间隔实际经常 6-8 分钟才读取一次?
A:Chrome 扩展 Manifest V3 后台不能常驻,定时器(chrome.alarms)有几秒到几十秒漂移,属于正常现象。
Q:选择器在 DevTools 里能命中,在扩展里却报"选择器未命中"?
A:目标站点大概率对自动读取做了防护,前几级拿到的是 HTML 骨架(未渲染 JS),选择器命中的是 JS 渲染后的节点。开启定位滚动,或让任务走 L2 及以上读取方式(真实浏览器渲染),详见"十、更多设置 · 多级读取策略"。
Q:Webhook 测试返回 200 但实际没收到消息?
A:多数平台(钉钉、企业微信、飞书)Webhook 有内容审核和频率限制。检查平台自己的 Webhook 日志;测试内容尽量含明文关键字。
Q:处理块预览显示白屏?
A:预览面板不会白屏:输入异常时会在面板顶部红色显示"预览异常:..."(如切"计算"分类后输入不是纯数字),按提示配好字段即自动恢复。若预览仍为空白,请打开 DevTools(F12)Console 拷贝错误反馈。
Q:可以引用同级或后序处理块的输出吗?
A:可以(自 2026-07-10 起)。变量引用不再受"UI 顺序"约束,任意其他块都可引用,保存时会检测循环依赖并拒保存。运行时按拓扑排序执行。
Q:块变量表达式为什么突然拒绝我原来能保存的内容?
A:自 2026-07-13 起,单段模式不再允许字面文字。{block1}文本{block2} 请改为 {block1}|{block2}(多段模式,两段各跑一遍步骤)或用"内容拼接"步骤。
Q:可插入变量弹窗为什么只显示 {block1},不显示我起的块名?
A:自 2026-07-13 起,可插入变量弹窗统一显示编号变量({block1}、{block2}),不再显示块名。目的是变量名稳定,改块名不影响引用。运行时两种写法({block1} 和 {块名})仍然都支持,你手写模板时可以自由选用。
Q:检测失败提示"未获得网站访问授权"怎么办?
A:按需授权模型下,目标网站未被允许访问。重新保存任务并在浏览器弹窗中选择"允许"(可只授权该网站),或在 chrome://extensions 扩展详情把"网站访问权限"设为"在所有网站上"。详见"十五、站点权限与授权"。
Q:AI 调用会花多少钱?怎么控制?
A:费用由你选择的 AI 服务商按其定价收取,扩展本身不收费也不经手费用。可在 AI 服务商配置里为每个方案开启"Token 用量硬停"(按日 / 按月上限),并在"AI 用量看板"查看近 30 天与近 12 月用量。