掌心向暖RPA | 语雀知识库批量导出,不滚动不监听,我只多看了一眼HTML源码
评论
收藏

掌心向暖RPA | 语雀知识库批量导出,不滚动不监听,我只多看了一眼HTML源码

经验分享
掌心向暖
2026-04-23 12:02·浏览量:128
掌心向暖
影刀中级开发者
发布于 2026-04-23 12:02128浏览

如果你试过用RPA做语雀知识库的自动化抓取,你一定懂这个痛——几十上百篇文档明明就在那里,左侧目录树却因为懒加载,根本没法一次性抓全。

很多人的第一反应是让RPA边滚动边抓节点。但语雀那个目录树是懒加载的,你往下滚,它才慢悠悠吐出几个新节点。

滚快了容易跳过,网络一卡节点没渲染出来,结果就缺胳膊少腿。为了补漏,你不得不加延迟、加重试、加异常处理,整个应用80%的代码都在跟前端的意外情况搏斗。

相比起来,网页监听是比滚动更优雅的路子,实测截获加载目录的API请求确实能拿到文档信息,但我也发现响应数据中,缺失了分组节点,而仅能获取有实际内容的文档节点。目录结构一旦涉及层级分组,就拼不完整了。

所以我在想,有没有一个连请求都不用等、还能把完整目录树一次拿全的办法?

后来在排查页面时,我无意中在浏览器的"开发者工具-元素面板",看到了下面这个:

<script>
(function() {
  window.appData = JSON.parse(decodeURIComponent("%7B%22me%22%3A..."));
})();
</script>

一大串URL编码的字符,被包在<script>标签里,安静地躺在页面最上方。

我把中间那段字符串复制到解码工具里,先URL解码,再JSON解析。然后我看到了book.toc

那是一个完整的数组。49篇文档。标题、链接、层级关系、文档ID,整整齐齐,一个不落。

原来,语雀在服务端生成这个HTML页面的时候,就已经把整个知识库的目录结构全部打包塞进去了。前端那些滚动、懒加载、动画效果,不过是把这棵已经到手的树,按你的视线一点点展开给你看。

那我们具体怎么操作?我总结了一个四步走的小闭环,在影刀RPA里跑得很稳:

第一步:获取该页面HTML片段。写个xpath直接取这段原始源码,这一步是所有后续操作的基础。

第二步:用正则定位那段隐藏JSON。匹配JSON.parse(decodeURIComponent("这个固定特征,提取双引号中间的那一长串URL编码字符串。

第三步:URL解码并解析。先做decodeURIComponent(把%7B变回{%22变回");再做JSON.parse,把字符串还原成结构化的JavaScript对象。

第四步:读取appData.book.toc这个字段本身就是完整目录树。遍历它,取每个节点的titleurl,拼接出每篇文档的URL,后续想怎么处理就怎么处理。

整个流程跑下来,从打开页面到拿到全部目录信息,耗时不到一秒钟

往期分享:

收藏1
全部评论1
最新
发布评论
评论