关于 blocked-page-recovery
用于取回受阻、付费墙限制或无法访问页面的技能及配套脚本。它依次尝试网页存档、可选的 Jina Reader、API 端点,最后才使用浏览器,并保留来源信息。
主要功能
- 01按既定顺序尝试恢复途径
- 02使用带日期的存档快照
- 03设置 API 密钥时使用 Jina Reader
- 04转向 API、信息源或站点地图
- 05验证页面内容而不只看状态码
- 06保留来源并标明过时副本
适用场景
- 01恢复因 403 或 429 响应受阻的文章
- 02查找已删除或受付费墙限制页面的存档
- 03获取 JavaScript 密集型页面的内容
- 04区分真实页面内容与拦截提示页
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ nousresearch/ hermes-agent --skill blocked-page-recovery安装后在 Claude Code 中输入/blocked-page-recovery确认已加载。
附带文件scripts/recover_page.py
详细介绍
被拦截页面的恢复
如果页面无法获取——403/429、Cloudflare 的“Just a moment...”、付费墙, 或机器人检测中间页——不要放弃,也不要反复请求同一个 URL。第三方服务通常保存着该页面的副本。按以下顺序逐步尝试,先试成本最低的方案。
处理顺序
1. Wayback Machine — archive.org "available" API (snapshot + timestamp)
2. archive.today — domain rotation: archive.ph → .md → .li → .is
3. Jina Reader — only if JINA_API_KEY is set (live server-side render)
4. API-first pivot — look for /api/, /graphql, .json, or RSS on the same host
5. Real browser — browser tool as the last, most expensive resort
使用捆绑脚本一次性运行:
python3 scripts/recover_page.py "https://example.com/blocked-article" --json
脚本会按顺序尝试各条路线,验证每个响应正文(见下文“虚假成功”),并输出第一个真实获取到的结果及其来源信息。
来源信息规范(必须遵守)
每份恢复的副本都有来源信息,引用时必须保留:
| 路线 | 来源信息 | 引用方式 |
|---|---|---|
| Wayback / archive.today | snapshot | 引用时注明快照日期:“据 2026-08-06 存档”。切勿将快照说成实时页面——它可能已过时。 |
| Jina Reader | live | 在服务器端重新渲染实时页面;按常规方式引用。 |
| 实时获取 / 浏览器 | live | 按常规方式引用。 |
如果用户需要当前数据(价格、供应情况、突发新闻),快照只能作为背景信息,不能当作答案——请明确说明这一点,并注明快照的时间。
手动路线
1. Wayback Machine(来源信息最可靠,优先尝试)
# Discovery: returns closest snapshot URL + timestamp as JSON
curl -sL "https://archive.org/wayback/available?url={URL}"
# Then fetch archived_snapshots.closest.url
要枚举多个快照(或恢复已删除的页面),可使用 CDX 索引:
curl -sL "https://web.archive.org/cdx/search/cdx?url={URL}&output=json&limit=10"
CDX 在负载较高时会间歇性返回 503——如果遇到这种情况,请改用
available API;不要反复重试。
适用于:任何被公开抓取过的 URL。不适用于:被 robots 规则屏蔽的网站、 从未抓取过的 URL、仅使用 JS 的 SPA(快照不会渲染页面)。
2. archive.today(付费墙、已删除内容)
由用户提交的存档——通常能找到 Wayback 没有的付费新闻文章。 它会严格限制请求频率(429),并轮换域名,因此请逐一尝试:
for d in archive.ph archive.md archive.li archive.is; do
curl -sL --max-time 20 "https://$d/newest/{URL}" -o ~/.hermes/cache/scratch/page.html \
-w "%{http_code}" && break
done
验证响应正文,而非状态码——即使返回 429,也可能附带几 KB 的限流 HTML,仅靠大小检查会误判为成功。
3. Jina Reader(需要 JINA_API_KEY)
r.jina.ai 会在服务器端使用真实浏览器重新渲染实时页面,
并返回 Markdown。匿名访问已不可用(401 → Turnstile);必须提供密钥:
curl -s -H "Authorization: Bearer $JINA_API_KEY" "https://r.jina.ai/{URL}"
可处理存档无法处理的 JS SPA。如果环境变量未设置,请完全跳过此路线。
4. 优先转向 API
与其背后的数据端点相比,WAF 对 HTML 页面拦截得严厉得多。在某个网站尝试被拦截 2-3 次后,不要再与 HTML 页面较劲,而应查找:
- 页面 URL 对应的
/api/...、/graphql或.json版本 - RSS/Atom 源(
/feed、/rss,或你已恢复的任何页面副本中的<link rel="alternate">) - 站点地图(
/sitemap.xml),其中可能列出未受限制的规范 URL
虚假成功——会说谎的路线
这些路线会返回 HTTP 200 和看似合理的响应正文,但内容不是目标页面。脚本会自动拒绝这些结果;手动操作时也应拒绝:
- Google Cache 已不可用(自 2024 年年中起)。
webcache.googleusercontent.com会返回 200 和数十 KB 的内容,但那是带有 JS 重定向的 Google Search 中间页, 并非缓存。切勿使用。 - AMP 缓存(
*.cdn.ampproject.org)大多会返回约 300 字节的<title>Redirecting</title>meta refresh 占位页,并指向原始(被拦截的)URL。 将其视作成功会造成循环获取。 - 限流响应正文:archive.today 的 429 页面是多 KB 的 HTML。请检查 其中是否包含目标页面的实际内容(标题词语、预期字符串),而不只是检查大小。
脚本应用的检测启发式:响应正文低于对应路线的字节数下限;meta refresh / JS 重定向占位页的目标为原始主机;中间页标题(“Just a moment”、“Redirecting”、“Google Search”、“Attention Required”)。
代理中继:不要使用
通用“网页代理”中继在设计上就是中间人。切勿通过此类中继发送 Cookie 或 Authorization 标头,也不要将其用于用户需要依赖的任何内容——其来源信息无法验证。请优先使用存档,至少它们会为副本标注时间。