语雀知识库批量导出,不滚动不监听,我只多看了一眼HTML源码
如果你试过用RPA做语雀知识库的自动化抓取,你一定懂这个痛——
几十上百篇文档明明就在那里,左侧目录树却因为懒加载,根本没法一次性抓全。
掌心向暖RPA自动化很多人的第一反应是 让RPA边滚动边抓节点 。但语雀那个目录树是懒加载的,你往下滚,它才慢悠悠吐出几个新节点。
滚快了容易跳过,网络一卡节点没渲染出来,结果就缺胳膊少腿。为了补漏,你不得不加延迟、加重试、加异常处理,整个应用80%的代码都在跟前端的意外情况搏斗。
掌心向暖RPA自动化相比起来, 网页监听是比滚动更优雅的路子 ,实测截获加载目录的API请求确实能拿到文档信息,但我也发现响应数据中, 缺失了分组节点 ,而仅能获取有实际内容的文档节点。目录结构一旦涉及层级分组,就拼不完整了。
所以我在想,有没有一个 连请求都不用等、还能把完整目录树一次拿全 的办法?
后来在排查页面时,我无意中在浏览器的"开发者工具-元素面板",看到了下面这个:
<script>
(function() {
window.appData = JSON.parse(decodeURIComponent("%7B%22me%22%3A..."));
})();
script>
一大串URL编码的字符,被包在 标签里,安静地躺在页面最上方。
掌心向暖RPA自动化我把中间那段字符串复制到解码工具里, 先URL解码,再JSON解析 。然后我看到了 book.toc 。
那是一个完整的数组。49篇文档。标题、链接、层级关系、文档ID,整整齐齐,一个不落。
掌心向暖RPA自动化原来,语雀在服务端生成这个HTML页面的时候,就已经把整个知识库的目录结构全部打包塞进去了。前端那些滚动、懒加载、动画效果,不过是把这棵已经到手的树,按你的视线一点点展开给你看。
那我们具体怎么操作?我总结了一个四步走的小闭环,在影刀RPA里跑得很稳:
掌心向暖RPA自动化第一步:获取该页面HTML片段。 写个xpath直接取这段 原始源码,这一步是所有后续操作的基础。
第二步:用正则定位那段隐藏JSON。 匹配 JSON.parse(decodeURIComponent(" 这个固定特征,提取双引号中间的那一长串URL编码字符串。
掌心向暖RPA自动化第三步:URL解码并解析。 先做 decodeURIComponent (把 %7B 变回 { , %22 变回 " );再做 JSON.parse ,把字符串还原成结构化的JavaScript对象。
掌心向暖RPA自动化第四步:读取 appData.book.toc 。 这个字段本身就是完整目录树。遍历它,取每个节点的 title 和 url ,拼接出每篇文档的URL,后续想怎么处理就怎么处理。
整个流程跑下来, 从打开页面到拿到全部目录信息,耗时不到一秒钟 。
掌心向暖RPA自动化写到这,我想说的不只是语雀怎么抓,而是一种更容易复用的思路:下次你面对一个Vue、React或Next.js页面时,先别急着写滚动逻辑。
打开源码搜一搜
* window.appData
* window.__INITIAL_STATE__
* script type=application/json;
这些是现代前端为了做服务端渲染,几乎必然会留下的"数据痕迹"。
找到它们,你就从"被UI牵着鼻子走的执行者",变成了"直接读取底层状态的编排者"。
掌心向暖RPA自动化不过上面这些,说到底只是第一步——把目录树从源码里捞出来。思路不复杂,但要把 目录解析、批量下载、导出 Markdown 这一套全部串起来,还是得花点时间。
如果你不想自己动手搭建这套自动化流程,而是想要一个 可以直接跑通的应用:输入语雀知识库链接,自动完成目录解析、批量下载文档,最终导出为本地Markdown格式。
-END-
爱练字的ISTJ型互联网人/信息整合怪/工具人/影刀高级认证工程师。
专注分享:RPA&AI自动化场景提效方案、效率软件安利、实用技能。"所有的生产要素都可以被构建,只有认知是壁垒",欢迎関注
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
