跳转到内容

Kabegame API 字典

Kabegame 是运行时注入到每个爬虫插件的宿主全局对象(不 import)。两个后端的桥同名 Kabegame,但接口面不同——本页逐方法列出签名,并标出各在哪个后端可用。用法教程见 V8 脚本WebView 脚本

打包工具库 @kabegame/plugin-sdkresolveUrl / md5 / …)是另一回事,见 plugin-sdk 工具库

「最低版本」为该方法应在 engines.kabegame 声明的最低应用版本;未标注即随后端基线(V8 / WebView 自 4.3.0 就绪)。

后端速览

V8WebView
入口export async function crawl(common, custom)顶层脚本,每页重跑
读配置crawlcustom 参数Kabegame.vars
类型声明@kabegame/typeslib.kabegame.d.ts

导航

方法签名V8WebView说明
toV8: to(url): Promise<string>
WebView: to(payload, opts?): Promise<void>
导航到 URL 并压入页面栈。V8 返回最终 URL;WebView 触发真实浏览器导航payload 可为字符串或 {url, pageLabel?, pageState?}。相对 URL 相对当前页解析。
backV8: back(): Promise<void>
WebView: back(count?): Promise<void>
弹出栈顶页面(WebView 可弹多层)。
currentUrlcurrentUrl(): Promise<string>当前页面 URL。WebView 用原生 location.href
currentHtmlcurrentHtml(): Promise<string>当前页面原始 HTML。WebView 用原生 document / fetch
currentDocumentcurrentDocument(): Promise<Document | null>把当前页 HTML 解析成 Document;缺失/失败返回 null。WebView 有真实 document
currentHeaderscurrentHeaders(): Promise<Record<string,string>>当前页响应头。

下载与元数据

方法签名V8WebView说明
downloadImagedownloadImage(url, opts?): Promise<void>把图片 / 视频加入下载。opts 见下表。
createImageMetadatacreateImageMetadata(map, opts?): bigint预先写入一行 metadata 并返回 metadata_id;可传给 downloadImage(url, { metadata_id }) 复用。

downloadImageopts

字段类型说明
namestring | null展示名 / 文件名。
urlstring | null来源 / 帖子 URL。
metadataJSON写入 image_metadata 的任意 JSON;metadata_id 已设时忽略。存储时由应用盖上运行插件的版本号;请在 metadata 内自带 schema 标记供迁移。
metadata_idnumber | null复用 createImageMetadata 返回的行 id。

请求头与 Cookie(V8)

方法签名V8WebView说明
setHeadersetHeader(key, value): void设置后续宿主 HTTP 请求与 fetch 的请求头。
delHeaderdelHeader(key): void删除先前设置的请求头。
requireCookierequireCookie(host?): boolean 4.4.0把用户在畅游里登录该 host 留下的 cookie 注入本任务 Cookie 头。省略 host 时从 base_url 推断。cookie 明文不暴露给插件,返回值只表示注入是否成功。

WebView 后端没有这些方法——请求头由真实浏览器会话决定,登录态自动携带。

进度与日志

方法签名V8WebView说明
addProgressaddProgress(percentage): number | Promise<void>累加任务进度百分比,宿主会 clamp。
warnwarn(message): void | Promise<void>warn 级任务日志。
loglog(message, level?): Promise<void>写任务日志(WebView 独有;V8 用 console.*)。

插件私有数据(V8)

方法签名V8WebView说明
pluginDatapluginData<T>(): T读按插件 ID 隔离的持久 JSON 对象。
setPluginDatasetPluginData(map): void替换该 JSON 对象。

跨页状态(WebView)

因每页重跑,WebView 用宿主状态跨页保留数据;V8 的 crawl 一次跑完,不需要。

方法签名V8WebView说明
vars属性(frozen 对象)本任务的 kbConfig 合并值,同步只读。
statestate(): Promise<object>读任务级共享 state。
updateStateupdateState(patch): Promise<object>对任务级 state 浅合并,返回结果。
pageStatepageState(): Promise<object>读栈顶页独立 page_state。
updatePageStateupdatePageState(patch): Promise<object>对栈顶页 page_state 浅合并。
pageLabelpageLabel(): Promise<string>栈顶页阶段标签,初始 "initial"

DOM 与时序辅助(WebView)

方法签名V8WebView说明
$$(selector): Element | null同步 document.querySelector
$$$$(selector): Element[]Array.from(document.querySelectorAll(...))
waitForDomwaitForDom(): Promise<void>DOMContentLoaded
waitForSelectorwaitForSelector(sel, opts?): Promise<Element>轮询直到命中;opts.timeout / opts.interval
sleepsleep(ms): Promise<void>本地延时(V8 用 SDK 的 sleepsetTimeout)。

生命周期(WebView)

V8 靠 crawl 返回 / 抛异常结束;WebView 需显式收尾。

方法签名V8WebView说明
exitexit(): Promise<void>正常结束:先排空当前页未决下载,再通知完成。
errorerror(message): Promise<void>失败结束。
requestShowWebviewrequestShowWebview(): Promise<void>显示爬虫窗口供用户手动登录 / 过验证。
clearDataclearData(): Promise<void>清 localStorage / sessionStorage 及当前页 Cookie。

私有虚拟文件系统 Kabegame.fs

每任务隔离的私有 VFS,路径从 getRoot() 开始,句柄随任务结束失效(勿持久化虚拟路径)。

  • V8:完整 deno_fs 接口,含所有 *Sync 同步方法;getRoot() 同步返回 string
  • WebView:仅异步子集,无任何 *SyncgetRoot() 返回 Promise<string>。可用:open / create(返回带 read/write/seek/stat/truncate/close 的句柄)、readFile / readTextFile / writeFile / writeTextFile / mkdir / readDir / remove / rename / copyFile / stat / lstat / exists / truncate / size / getRoot

完整的 V8 fs 类型见 @kabegame/typesKabegameFsApi

虚拟路径媒体工具 Kabegame.ffmpeg

方法签名V8WebView说明
ffmpeg.muxStreamsmuxStreams(inputs, output): Promise<void> 4.4.0对至少两个媒体流做 stream-copy 合流。inputsoutput 都必须是当前任务虚拟文件系统中的绝对路径。
ffmpeg.probeprobe(path): Promise<ProbeResult | null> 4.4.0探测虚拟路径媒体;成功返回 { isVideo, mimeType, width, height, browserSafe },无法识别或非视频返回 null

这两个 API 不接受或返回宿主真实路径。Android 不提供 FFmpeg/rsmpeg,调用会抛出可读的不支持错误。插件使用任一方法时,须声明 engines.kabegame >= 4.4.0

元数据迁移辅助

metadata_migrations/migrate.js 运行在裸 V8没有 Kabegame.*,只有原生 JSON / String / RegExp 等。契约见 V8 脚本 · 元数据迁移

延伸阅读