跳转到内容

爬虫后端选择

Kabegame 的 v3 爬虫插件通过 package.jsonkbBackend 显式声明运行后端。当前只有两个后端:V8WebView。作为插件作者,你需要知道它们各自的能力边界,才能判断目标站点该写哪个脚本、以及能否在安卓上跑。

后端概览

后端入口运行环境桌面安卓
V8export async function crawl(common, custom)嵌入式 JS 引擎 + 宿主 HTTP / 下载 API,无 DOM
WebView顶层脚本,每页重跑真实浏览器上下文(隐藏窗口)

脚本放在 .kgpg 包内,由 package.jsonmainkbBackend 指定。详见 插件格式

何时用 V8 后端

V8 是默认首选。选它的场景:

  • 目标站有清晰的 REST / JSON 接口,或列表页是可解析的 HTML。
  • 需要自包含的爬取逻辑(签名、分页、数据整理用 JS 更合适),但不需要 DOM 渲染、浏览器 Cookie 容器或页面执行环境。
  • 你希望插件在安卓上也能工作 —— V8 是唯一能在安卓运行的后端。

V8 脚本导出 async function crawl(common, custom)。配置从 custom 读;宿主能力通过全局 Kabegame.* 提供(Kabegame.todownloadImagecurrentDocument 等)。运行时还提供常用 Web 平台全局(URLfetchcrypto.subtleDOMParser 等)。完整说明见 V8 脚本

何时用 WebView 后端

把爬取任务交给真实浏览器环境的场景:

  • 目标站是 SPA,数据靠 JS 渲染进 DOM,纯 HTTP 拿不到。
  • 有 Cloudflare JS 挑战、浏览器指纹检测等反爬机制。
  • 需要复用用户在爬虫窗口里登录留下的 Cookie / Session。
  • 依赖 fetch / XMLHttpRequest 在浏览器上下文里的同源优势。

WebView 后端会启动一个隐藏的爬虫窗口执行你的脚本。这是桌面专属能力,且只在确实需要浏览器环境时使用。入口不是 crawl() 函数,而是一段每次页面加载都重跑的顶层脚本;配置从 Kabegame.vars 读。完整说明见 WebView 脚本

两个后端的 Kabegame.* 差异

两个后端的宿主桥同名 Kabegame,但能力面不同。V8 的类型声明在 @kabegame/types,只覆盖 V8 的完整 API;WebView 的桥是另一套。

能力V8WebView
入口export async function crawl(common, custom)顶层脚本,每页重跑
读表单配置crawlcustom 参数Kabegame.vars(frozen 对象)
导航to(url) 宿主抓取式to(payload, { pageLabel, pageState }) 真实浏览器导航 + page_stack
back()back()back(count?)
读当前页currentUrl / currentHtml / currentDocument / currentHeaders用浏览器原生 location / document / fetch
下载downloadImage(url, opts?)downloadImage(url, opts?)
进度 / 日志addProgress / warnaddProgress / warn / log(msg, level?)
请求头setHeader / delHeader❌(由真实浏览器会话决定)
Cookie 注入requireCookie(host?) 4.4.0❌(靠真实登录态自动带 Cookie)
私有持久数据pluginData / setPluginData
跨页状态不需要(crawl 一次跑完)state / updateState / pageState / updatePageState
metadata 行createImageMetadata❌(随 downloadImage(url, { metadata }) 传)
DOM 辅助❌(用 DOMParser$ / $$ / waitForDom / waitForSelector
生命周期crawl 返回 / 抛异常即结束exit() / error() / requestShowWebview() / clearData()
私有虚拟文件系统 fs完整 deno_fs(含同步方法)仅异步子集

逐方法签名见 Kabegame API 字典

Android 限制

WebView 后端在安卓构建里不可用,相关代码被条件编译剔除(爬虫窗口创建、WebView handler、crawler-capability 都在 #[cfg(not(target_os = "android"))] 里,或在生成 tauri.conf.json 时排除)。

V8 后端在安卓上可用 —— 运行时使用仓库自建的 aarch64 v8 产物。因此插件要覆盖安卓用户,必须用 V8 后端

更多安卓侧的使用差异见 Android 指南

两个后端处理登录态的方式不同:

  • WebView 后端:使用浏览器原生 Cookie Store。用户在爬虫窗口里登录后,Cookie 持久化,下次任务自动携带。适合需要长期登录态的站点。
  • V8 后端:没有浏览器 Cookie 容器。有两种做法:
    1. 自行 Kabegame.setHeader("Cookie", ...)
    2. Kabegame.requireCookie(host?) 4.4.0 让宿主把用户在畅游里登录该站留下的 cookie 注入到本任务的请求头。cookie 明文不会暴露给插件,返回值只表示注入是否成功。

如果目标站要求登录且验证流程复杂(滑块、短信、JS 挑战),WebView 几乎是唯一选择。

性能与资源

维度V8WebView
启动开销需创建隐藏窗口、加载目标页
内存占用一个完整的 WebView 进程
渲染 JS执行脚本但无 DOM完整浏览器渲染
适合场景HTTP / API 采集、签名、数据整理;安卓少量、必需浏览器上下文的站点

速查:我该选哪个

  • 能写成 HTTP 请求 + 解析,或需要安卓可用 → V8
  • 强 JS 渲染 / 反爬 / 需浏览器登录态 → WebView(仅桌面)

后端声明

{
"main": "dist/main.js",
"kbBackend": "v8" // 或 "webview"(main 一般为 crawl.js)
}

延伸阅读