Cai
2026-08-18 eb8ba489090625986bbf207576717556386742d8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
"use strict";
const fs = require("fs");
const vm = require("vm");
const source = fs.readFileSync(process.argv[2], "utf8");
const fixtureCase = process.argv[3] || "new";
const profileUid = fixtureCase === "identity" ? "1" : "1420210197";
const profile = {href:`https://space.bilibili.com/${profileUid}`, textContent:fixtureCase === "identity" ? "其他用户" : "青枫浦上Q"};
const link = {href:"https://www.bilibili.com/opus/456"};
const time = {getAttribute: () => "2026-08-13T01:55:00Z"};
const body = {textContent:"fixture body"};
const card = {
  tagName:"DIV",
  textContent:"fixture body",
  getAttribute:(name) => name === "data-dynamic-id" ? "456" : null,
  querySelector:(selector) => selector.includes("/opus/") ? link : selector === "time" ? time : selector.includes("bili-rich-text") ? body : null,
  querySelectorAll:() => []
};
const unparsed = {
  tagName:"DIV",
  textContent:"unparsed fixture body",
  getAttribute:() => null,
  querySelector:() => null,
  querySelectorAll:() => []
};
const fixtureNodes = fixtureCase === "empty" ? [] : fixtureCase === "unparsed" ? [unparsed] : [card];
const document = {
  readyState:"complete", visibilityState:"visible",
  body:{innerText:`fixture body ${fixtureCase === "unparsed" ? "" : "已经到底了"}`},
  title:"青枫浦上Q个人动态-青枫浦上Q动态记录-哔哩哔哩视频",
  querySelectorAll:() => fixtureNodes,
  querySelector:(selector) => selector.startsWith("a[href") ? profile : null
};
const context = {document, location:{href:"https://space.bilibili.com/1420210197/dynamic"}, URL, setTimeout};
vm.createContext(context);
vm.runInContext(source + "\nthis.extractor = projectInfoCollectVisibleDynamicNodes;", context);
context.extractor({page_internal_settle_timeout_ms:15000}).then((value) => process.stdout.write(JSON.stringify(value)));