
在一类 Wiki 资料站里最容易被忽略的操作不是搜索某个词而是理解页面本身的组织方式。拿 PRTS 来说很多人在“本次 SS”上线后想直接看 S 关第一反应是在搜索框输入“S 关”或“S”结果翻好几页都找不到目标。真正的入口往往就在活动总览页里关卡列表、敌人信息和掉落数据都挂在同一个活动名下只是很少有人把这套层级关系和浏览器操作结合起来用。这篇文章会以 PRTS 查阅本次活动 S 关为例先把站内信息结构讲清楚再依次介绍浏览器自定义搜索引擎、书签小工具、控制台筛选方法和本地文档模板。即使你平时不玩游戏只看 Wiki 站点维护和前端调试思路也能把其中大部分方法迁移到其他资料站上。1. 为什么 PRTS 里查“S 关”总是查不到很多人查不到 S 关不是因为资料站没有收录而是因为搜索方式与页面组织方式不匹配。PRTS 不是一篇纯文章而是按活动、关卡、敌人、材料、剧情等多个维度组织的结构化站点S 关通常作为活动关卡的一部分挂在对应的活动页面下不会单独成为一条全局可见的高权重词条。1.1 先搞清楚 PRTS、SS 和 S 关分别指什么PRTS 是面向《明日方舟》的社区资料站提供干员、关卡、材料、敌人、剧情等大量数据。SS 是玩家社区对 Side Story 的常用缩写代表一次活动主题。S 关则是活动关卡中带有 S 编号的特殊关卡通常与活动主线关卡并列展示但难度、敌人构成和掉落逻辑可能不同。这里不讨论 S 关的具体游戏机制只说资料查询里的一个小结论S 关不是一个可以独立检索的名词它必须依附于“某次活动”这个上下文。比如玩家说“本次 SS 的 S 关”重点不是“S 关”而是“本次 SS”。如果你把搜索重心放在“S”这个单词上搜索引擎会忽略太短的符号最终返回一堆包含字母 S 的词条比如干员名、技能名、地名缩写这些都不是你要的关卡页面。1.2 “搜索框输入 S”是无效路径正确路径是活动总览从信息组织角度看一次活动在 PRTS 里通常拥有一个总览页面这个页面会集中展示活动开放时间和参与条件关卡一览和关卡编号敌方情报和特殊机制材料掉落和商店兑换剧情节点和隐藏条件S 关一般作为关卡一览中的分组存在。因此正确路径应该是先找到活动总览页再进入关卡列表最后定位 S 关。这个过程比全站搜索稳定因为活动名是唯一的而“S”这个关键词太宽泛。在实际操作中可以先在站内搜索本次活动的正式名称进入活动页后观察左侧导航、页内锚点或关卡表格。很多 Wiki 站点的活动页面会使用“普通关卡”“S 关”“突袭”等方式分组页面结构清楚后后续所有操作都会快很多。1.3 建立正确的层级认知用一句话概括活动名是第一层级关卡列表是第二层级S 关是第三层级。查阅时应当自上而下找而不是从全局搜索直接跳到第三层级。这套认知也有助于后续脚本设计。你在写高亮脚本、自定义搜索引擎或本地模板时所有字段都离不开“活动名 关卡编号 页面链接”这个三元组。问题是很多人在第一步就把活动名写错了导致后面收藏、记录、分享全是无效数据。2. 从浏览器地址栏开始建立直达入口一旦理解了信息层级就需要把“找到活动页 - 定位 S 关”这个重复动作变成低成本的浏览器操作。最直接的方法是自定义搜索引擎、收藏夹和地址栏组合起来让打开 PRTS 变成一次点击或一次快捷键输入。2.1 第一步用站内搜索验证活动关键词和 URL 规律在配置任何自动化入口之前先手动完成一次搜索。打开 PRTS在站内搜索框输入本次活动的正式名称提交后观察地址栏中的 URL。不同 Wiki 站点的搜索 URL 不一样有的使用index.php?search关键词有的使用wiki/关键词这种短路径。不要凭记忆填写直接复制地址栏里的内容更可靠。复制时把搜索词部分替换成%s这就是后面自定义搜索引擎需要的查询串。以常见的 Wiki 搜索结构为例最后得到的内容形式类似https://你的wiki域名/index.php?search%s这里的关键不是域名本身而是%s占位符。浏览器会把你输入的搜索词替换到%s位置再发起请求。2.2 第二步把浏览器自定义搜索引擎指向 PRTS 站内搜索Chrome 和 Edge 都支持自定义搜索引擎配置完成后可以在地址栏直接输入“关键字 空格 活动名”立刻发起站内搜索。具体步骤如下打开浏览器设置找到“搜索引擎”或“地址栏和搜索引擎”区域。选择“管理搜索引擎”。点击“添加”。搜索引擎名称填写“PRTS”也可以按自己的习惯填写。关键字填写一个短单词比如prts。查询 URL 填写上一步从地址栏复制并替换好%s的地址。保存后在地址栏输入prts 本次SS活动名按回车即可直接看到站内搜索结果。这一套配置的本质是省掉了“打开站点 - 等待首页加载 - 点击搜索框 - 输入关键词”四个步骤。配置完成后地址栏就是搜索入口。2.3 第三步用收藏夹保存活动总览页和常用筛选页搜索虽然已经很快但比搜索更快的是直接打开收藏夹。定期整理活动页、关卡列表页甚至你关注的敌人数据页能显著减少重复检索。建议建立三个收藏位置活动总览页每次活动开始后第一件事就是把总览页加入书签。S 关列表页如果页面里 S 关有独立的锚点或分组把带锚点的地址存下来。本地笔记模板页这个不是 PRTS 页面而是你用来记录 S 关信息的位置。还需要注意收藏夹里的名称尽量使用固定格式例如“PRTS-活动名-S关”不要只存域名。否则活动结束后再次整理很难分清哪一条对应哪次活动。3. 用书签小工具在当前页面标记 S 关搜索入口建立后下一步要解决视觉定位问题。活动关卡列表往往包含大量文字人类眼睛扫描速度远不如脚本。你可以在当前页面执行一段 JavaScript把所有包含指定关键词的链接或单元格标记出来这就是书签小工具。3.1 为什么需要一个本地高亮脚本当页面里有几十个关卡节点你只关心带 S 编号的条目时单纯靠眼睛找容易漏。高亮脚本不会改变页面数据它只修改当前页面的显示样式把包含关键词的节点加上背景色和边框。这类脚本适合在已经打开的正确页面上执行配合前面说的 URL 入口整个流程会非常顺。书签小工具和普通网页脚本的区别在于它不需要安装扩展也不依赖服务器只在当前页面的上下文里运行一次。3.2 最小高亮脚本实现新建一个书签在 URL 位置填入下面这段代码javascript:(function () { var keyword prompt(输入要标记的关键词, S); if (keyword null || keyword ) { return; } var nodes document.querySelectorAll(a, td, span); var count 0; nodes.forEach(function (node) { if (node.children.length 0 node.textContent.indexOf(keyword) ! -1) { node.style.backgroundColor #fff3bf; node.style.outline 1px solid #f59f00; count; } }); alert(已标记 count 处); })();保存后在 PRTS 的关卡列表页点击这个书签浏览器会弹出输入框默认关键词是S确认后页面里所有直接包含字母 S 的文本节点都会被标黄。注意这里筛选了没有子节点的元素主要为了避免把整个表格都标记出来。这个脚本只做视觉标记不发送数据也不改写页面内容关闭或刷新页面后效果自动消失。3.3 书签小工具的两个限制第一个限制是脚本作用域。书签小工具只能在当前标签页执行无法跨页面自动运行。如果你从活动页跳到关卡详情页需要再次点击书签。第二个限制是选择器依赖页面结构。如果 PRTS 的关卡列表不是用a、td、span渲染或者 S 关藏在某个折叠区域里脚本可能标记不到目标内容。遇到这种情况不要急着改脚本先用第 4 节介绍的控制台方法确认页面真实结构。4. 用浏览器控制台复核页面中的链接和异步内容书签脚本和高亮逻辑都建立在“页面结构稳定”的假设之上。任何 Wiki 站点都会改版或者用异步加载方式渲染内容所以你需要一套快速检查手段定位链接、判断内容是否已渲染。4.1 查看当前页面包含关键词的链接在 PRTS 关卡列表页按 F12 打开浏览器开发者工具切到 Console 面板执行下面这段代码Array.from(document.querySelectorAll(a)) .filter(function (a) { return a.textContent.indexOf(S) ! -1; }) .slice(0, 20) .forEach(function (a) { console.log(a.textContent.trim(), a.href); });这段代码会把文本中包含 S 的链接文本和真实 href 打印到控制台。观察结果时要注意链接文本是否确实对应 S 关href 是否指向当前活动的路径有没有跳转到不相关的词条。如果控制台输出为空说明页面上的 S 关不是以普通a标签文本呈现或者内容还没加载。4.2 判断内容是不是异步加载很多 Wiki 页面会使用导航栏、折叠面板或滚动加载来减少首屏体积。如果打开页面后 S 关区域显示“加载中”等几秒才出现说明这部分内容是异步渲染的。判断方式有两个打开开发者工具 Network 面板刷新页面观察是否有 XHR 或 Fetch 请求在首屏后发出。在 Console 里执行setTimeout延迟几秒后再检查 DOM看结果是否变化。如果确认是异步加载书签小工具在页面刚打开时执行就会失效。此时要么手动等待内容渲染完再点要么把脚本改成监听 DOM 变化的方式。4.3 异步场景下的脚本调整思路最简单的调整是使用MutationObserver监听目标容器内节点变化一旦出现符合条件的节点就高亮。下面是一个思路示例function highlightByKeyword(keyword) { var walker document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT); var nodes []; while (walker.nextNode()) { var node walker.currentNode; if (node.textContent.indexOf(keyword) ! -1) { nodes.push(node.parentElement); } } nodes.forEach(function (el) { el.style.backgroundColor #fff3bf; }); }当然直接把这段代码塞进书签会过于复杂。更合适的方式是把它放到用户脚本扩展里每次匹配到页面时自动执行。普通用户只需要记住一点在异步页面里先等内容出现再做高亮。5. 把 S 关资料整理成可持续维护的本地文档看关卡不是终点很多玩家会记录掉落、敌方情报和通关思路。与其每次重新查一遍不如在本地维护一份按活动组织的 S 关速查表。这样第二次回顾时连 PRTS 都不用打开只看本地文档就能复现大部分信息。5.1 字段设计以验证结果为中心本地文档的核心不是堆截图而是让“这条信息是否验证过”一目了然。建议字段如下字段填写内容是否建议必填活动名本次 Side Story 的正式名称是关卡编号例如 S-1、S-2是页面链接对应 PRTS 页面 URL是解锁条件进入该关卡的先决条件视需要敌方要点BOSS、精英怪和特殊机制视需要推荐配置自己验证过的阵容或思路视需要掉落材料已确认的掉落信息视需要验证结果未验证 / 已确认 / 已过时是备注其他补充说明否把“验证结果”设为必填是为了避免信息沉淀成不可靠的二手数据。写文档的人一旦知道每条记录都标注可信状态后续使用就会更谨慎。5.2 Markdown 模板和说明用 Markdown 做本地记录结构清晰且不依赖特定软件。模板可以这样写# 活动名示例活动 ## 活动信息 - 活动链接 - 开放时间 ## S 关速查 ### S-1 - 页面链接 - 解锁条件 - 敌方要点 - 推荐配置 - 掉落材料 - 验证结果未验证 - 备注 ### S-2 - 页面链接 - 解锁条件 - 敌方要点 - 推荐配置 - 掉落材料 - 验证结果未验证 - 备注这里的每个小节对应一个 S 关所有链接都建议保留来源页面。不要只写“PRTS 上能看”因为链接才是最可复现的信息入口。5.3 用脚本批量生成空白模板每次活动都手动复制模板久了会烦。可以用一个简单的 Python 脚本在本地目录里生成带活动名的 Markdown 文件from pathlib import Path name input(请输入活动名).strip() if not name: raise SystemExit(活动名不能为空) content f# 活动名{name} ## 活动信息 - 活动链接 - 开放时间 ## S 关速查 path Path(fprts-{name}.md) path.write_text(content, encodingutf-8) print(f已生成{path.resolve()})运行后会在当前目录生成一个以活动名命名的 Markdown 文件。脚本本身不联网也不抓取 PRTS 任何数据只是帮你省去重复创建文件的动作。6. 常见问题与排查链路使用过程中会遇到一些固定场景下面给出从现象到排查的建议顺序。6.1 现象站内搜索出来一堆无关内容因为搜索词太短或不够具体。排查顺序如下确认活动正式名称是否写对不要用缩写代替。确认搜索的是活动名而不是“S 关”。从搜索结果进入活动总览页再找关卡列表。如果仍然找不到查看活动页是否存在“关卡”相关的二级导航。例如输入“S 关”会命中无数无关结果而输入“本次活动的正式名称”则能稳定进入正确页面。短关键词适合做页面内标记不适合做全站搜索。6.2 现象书签小工具点击后没有反应书签小工具最常见的失效原因有三个浏览器禁止了当前页面的 JavaScript 执行。页面结构里没有匹配a, td, span这些选择器的节点。当前页面不是关卡列表页而是某个异步加载未完成的空白容器。检查方式先按 F12 打开控制台手动执行高亮代码看有没有报错如果没有报错但标记数量为 0再执行 4.1 节中的链接检查脚本看关键词是否真的存在于 DOM 中。6.3 现象高亮位置不对或页面结构一改就失效高亮脚本基于textContent.indexOf(keyword)判断关键词只要某个链接文字里包含字母 S就会被标记。所以当页面有大量含 S 的英文、队伍名、物品名时高亮范围会超出预期。解决方法是把关键词从S改成更具体的字符串例如S-、S1、S-1并在脚本里改成indexOf(keyword) ! -1配合具体关键词。页面结构调整时先检查 DOM 中的实际标签再更新选择器。6.4 排查链路小结表问题现象可能原因检查方式处理建议搜索不到 S 关关键词太短被搜索引擎忽略换活动全称搜索先进入活动总览页书签小工具无反应脚本未执行或选择器不匹配控制台手动运行代码调整选择器或关键词高亮数量过多关键词过宽打印匹配节点列表换成S-等更精确文本内容异步加载后失效脚本执行时机太早在 Network 面板看请求手动等待或使用 MutationObserver本地模板无法复用字段缺失或链接丢失检查文档结构与原始 URL使用固定模板生成文件7. 最佳实践从“能看 S 关”到“管理攻略知识库”PRTS 能直接看本次 SS 的 S 关这只是一个起点。真正有价值的是你围绕它建立的一套查阅、标记、记录和复核流程。7.1 每次活动只维护一张速查表不要让 S 关信息分散在聊天记录、截图和浏览器书签里。每开一次新活动就用 Python 脚本生成一份带活动名的 Markdown 文件把所有 S 关链接汇总到同一张表里。验证一条更新一条不验证就保持“未验证”状态。这套方式的好处是你不再依赖记忆也不需要每次重复浏览页面。所有链接和数据都集中在一个本地文件里后续查错和回顾都有据可依。7.2 把本地脚本按用途拆分高亮脚本、链接检查脚本、模板生成脚本是三件不同的事建议拆成三个文件分别维护。高亮脚本放在书签里适合随时点击链接检查脚本放在浏览器控制台或本地片段工具里适合调试页面模板生成脚本放在终端里适合每次活动开始时执行。拆分不是为了炫技而是让每个脚本保持足够小。单个文件越短出问题时越容易定位。7.3 合规边界和学习建议使用 PRTS 时建议遵守资料站的编辑规范不要批量抓取接口不要绕过页面限制不要把小工具变成高频请求工具。书签脚本和用户脚本只用于本地阅读体验优化不涉及数据导出和商业使用。对前端学习者来说这个场景是一个很合适的练习素材你可以观察真实 Wiki 站点的 DOM 结构尝试用原生 JavaScript 实现高亮、筛选、异步监听等功能。不需要理解所有游戏内容也能从中学到选择器、DOM 操作和浏览器执行时机的经验。如果能把每次活动都做成一条固定流程你收获的就不只是“知道 S 关在哪里”而是一套可以复用到任意资料站的查找和记录方法。下一次打开任何结构复杂的信息站点时你已经知道先看内容层级再配置入口最后建立自己的资料库。