@cloud411716/fancy-webnovel 0.1.76 → 0.1.78
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/infra.js +26 -21
- package/package.json +1 -1
- package/plugins/fancy-bootstrap/index.js +4 -2
- package/plugins/fancy-scan/index.js +1 -2
- package/plugins/fancy-scan/scripts/run-scan.js +22 -44
- package/plugins/fancy-scan/scripts/scraper-registry.md +3 -5
- package/plugins/fancy-scan/scripts/scrapers/cdp-utils.cjs +7 -5
- package/plugins/fancy-scan/scripts/scrapers/fanqie-rank-scraper.cjs +282 -253
- package/plugins/fancy-scan/scripts/scrapers/jjwxc-rank-scraper.cjs +193 -253
- package/plugins/fancy-scan/scripts/scrapers/node_modules/.package-lock.json +20 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/LICENSE +202 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/NOTICE +5 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/README.md +3 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/ThirdPartyNotices.txt +13 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/bin/install_media_pack.ps1 +5 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/bin/install_webkit_wsl.ps1 +33 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/bin/reinstall_chrome_beta_linux.sh +42 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/bin/reinstall_chrome_beta_mac.sh +13 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/bin/reinstall_chrome_beta_win.ps1 +24 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/bin/reinstall_chrome_stable_linux.sh +42 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/bin/reinstall_chrome_stable_mac.sh +12 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/bin/reinstall_chrome_stable_win.ps1 +24 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/bin/reinstall_msedge_beta_linux.sh +48 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/bin/reinstall_msedge_beta_mac.sh +11 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/bin/reinstall_msedge_beta_win.ps1 +23 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/bin/reinstall_msedge_dev_linux.sh +48 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/bin/reinstall_msedge_dev_mac.sh +11 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/bin/reinstall_msedge_dev_win.ps1 +23 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/bin/reinstall_msedge_stable_linux.sh +48 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/bin/reinstall_msedge_stable_mac.sh +11 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/bin/reinstall_msedge_stable_win.ps1 +24 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/browsers.json +75 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/cli.js +21 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/index.d.ts +17 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/index.js +17 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/index.mjs +28 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/bootstrap.js +88 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/coreBundle.js +74830 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/entry/cliDaemon.js +5 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/entry/dashboardApp.js +3 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/entry/mcp.js +10 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/entry/oopBrowserDownload.js +3 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/package.js +50 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/server/chromium/appIcon.png +0 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/server/electron/loader.js +118 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/serverRegistry.js +7347 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/serverRegistry.js.LICENSE +354 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/tools/cli-client/channelSessions.js +141 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/tools/cli-client/cli.js +6 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/tools/cli-client/help.json +708 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/tools/cli-client/minimist.js +128 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/tools/cli-client/output.js +343 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/tools/cli-client/program.js +404 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/tools/cli-client/registry.js +176 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/tools/cli-client/session.js +258 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/tools/dashboard/appIcon.png +0 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/tools/skills/playwright-cli/SKILL.md +420 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/element-attributes.md +23 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/request-mocking.md +87 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/running-code.md +241 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/session-management.md +225 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/storage-state.md +275 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/test-generation.md +433 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/tracing.md +139 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/video-recording.md +143 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/SKILL.md +143 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/references/gallery-spec.md +144 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/references/migration.md +85 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/references/react.md +67 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/references/vue.md +75 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/tools/skills/playwright-trace/SKILL.md +171 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/tools/utils/extension.js +101 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/tools/utils/socketConnection.js +108 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/utilsBundle.js +90764 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/utilsBundle.js.LICENSE +2179 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/dashboard/assets/codicon-DCmgc-ay.ttf +0 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/dashboard/assets/firefox-1bWoP6pv.svg +1 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/dashboard/assets/firefox-beta-k3eOH_eK.svg +1 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/dashboard/assets/firefox-nightly-Cp5nfeDT.svg +1 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/dashboard/assets/index-CyWAfh-p.js +11 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/dashboard/assets/index-DhC616m4.css +1 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/dashboard/assets/safari-na3_-uQk.svg +1 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/dashboard/index.html +29 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/dashboard/playwright-logo.svg +24 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/htmlReport/index.html +16 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/htmlReport/report.css +2 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/htmlReport/report.js +32 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule--QdMvsKi.css +1 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule-CwYYHbcZ.js +32 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/recorder/assets/index-DYjdXIbE.js +129 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/recorder/assets/index-l_lX622x.css +1 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/recorder/index.html +29 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/recorder/playwright-logo.svg +9 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/traceViewer/assets/codeMirrorModule-rXmQmLUY.js +32 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/traceViewer/assets/defaultSettingsView-B-dXF5JN.js +181 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/traceViewer/assets/urlMatch-L3liM589.js +1 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/traceViewer/assets/xtermModule-BuZfJS5v.js +7 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/traceViewer/codeMirrorModule.-QdMvsKi.css +1 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/traceViewer/defaultSettingsView.BLFoOugd.css +1 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/traceViewer/index.B_TqY17P.css +1 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/traceViewer/index.KZ4wOW1K.js +1 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/traceViewer/index.html +44 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/traceViewer/manifest.webmanifest +16 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/traceViewer/playwright-logo.svg +9 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/traceViewer/snapshot.B_Jk1wbt.js +1 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/traceViewer/snapshot.html +10 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/traceViewer/sw.bundle.js +4 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/traceViewer/uiMode.C7UW1sC9.css +1 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/traceViewer/uiMode.Dzuouizj.js +5 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/traceViewer/uiMode.html +18 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/vite/traceViewer/xtermModule.kHJ-D0s7.css +1 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/webp_codec.LICENSE +173 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/webp_codec.wasm +0 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/lib/xdg-open +1267 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/package.json +34 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/types/protocol.d.ts +24842 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/types/structs.d.ts +52 -0
- package/plugins/fancy-scan/scripts/scrapers/node_modules/playwright-core/types/types.d.ts +26188 -0
- package/plugins/fancy-scan/scripts/scrapers/package-lock.json +27 -0
- package/plugins/fancy-scan/scripts/scrapers/package.json +9 -0
- package/plugins/fancy-scan/scripts/scrapers/qimao-rank-scraper.cjs +200 -297
- package/plugins/fancy-scan/scripts/scrapers/zhihu-rank-scraper.cjs +80 -80
package/infra.js
CHANGED
|
@@ -5,13 +5,14 @@
|
|
|
5
5
|
* notify(session, text) — 打印消息给用户(不触发 LLM)
|
|
6
6
|
* llmFollowup(invocation, prompt) — 发送消息给 LLM,让 LLM 继续处理
|
|
7
7
|
* spawnScript(cmd, args, opts) — spawn 子进程,解析 stdout JSON
|
|
8
|
+
* startActivity(session) — 开始 Activity Line 计时,返回 stop 函数
|
|
8
9
|
*
|
|
9
10
|
* 所有 fancy-* 插件均直接 import 此文件。
|
|
10
11
|
*/
|
|
11
12
|
|
|
12
|
-
//
|
|
13
|
+
// --------------------------------------------------------------------------
|
|
13
14
|
// notify — 打印消息给用户(queueMicrotask 避免打断 LLM 输出顺序)
|
|
14
|
-
//
|
|
15
|
+
// --------------------------------------------------------------------------
|
|
15
16
|
|
|
16
17
|
export function notify(session, text) {
|
|
17
18
|
queueMicrotask(() => {
|
|
@@ -25,7 +26,7 @@ export function notify(session, text) {
|
|
|
25
26
|
|
|
26
27
|
// --------------------------------------------------------------------------
|
|
27
28
|
// llmFollowup
|
|
28
|
-
//
|
|
29
|
+
// --------------------------------------------------------------------------
|
|
29
30
|
|
|
30
31
|
export function llmFollowup(invocation, content) {
|
|
31
32
|
const prompt = typeof content === 'string' ? content : JSON.stringify(content);
|
|
@@ -35,19 +36,37 @@ export function llmFollowup(invocation, content) {
|
|
|
35
36
|
});
|
|
36
37
|
}
|
|
37
38
|
|
|
38
|
-
//
|
|
39
|
+
// --------------------------------------------------------------------------
|
|
40
|
+
// startActivity — Activity Line 计时器(显示 Running… + 实时计时)
|
|
41
|
+
// 调用 startActivity() 返回 stop 函数,进入新阶段时先 stop 再 start
|
|
42
|
+
// --------------------------------------------------------------------------
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* @param {import('@deepseek-ai/dsh-session').Session} session
|
|
46
|
+
* @returns {() => void} stop — 调用后停止计时
|
|
47
|
+
*/
|
|
48
|
+
export function startActivity(session) {
|
|
49
|
+
session.append('turn/start', { source: 'fancy-plugin' });
|
|
50
|
+
return () => session.append('turn/end', { source: 'fancy-plugin' });
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// --------------------------------------------------------------------------
|
|
39
54
|
// spawnScript — spawn 子进程,stdout 只收集 JSON,stderr 单独收集
|
|
40
|
-
//
|
|
55
|
+
// opts.stop() 会在进程终止时自动调用(用于清理 turn/start)
|
|
56
|
+
// --------------------------------------------------------------------------
|
|
41
57
|
|
|
42
|
-
export function spawnScript(cmd, args, { timeout = 30000, cwd } = {}) {
|
|
58
|
+
export function spawnScript(cmd, args, { timeout = 30000, cwd, stop } = {}) {
|
|
43
59
|
return new Promise(async (resolve) => {
|
|
44
60
|
const { spawn } = await import('child_process');
|
|
45
61
|
const proc = spawn(cmd, args, { timeout, cwd, stdio: ['ignore', 'pipe', 'pipe'] });
|
|
46
62
|
const outParts = [], errParts = [];
|
|
47
63
|
proc.stdout.on('data', (d) => { outParts.push(d.toString()); });
|
|
48
64
|
proc.stderr.on('data', (d) => { errParts.push(d.toString()); });
|
|
65
|
+
|
|
66
|
+
const cleanup = () => { try { stop?.(); } catch (_) {} };
|
|
49
67
|
proc.on('close', (code) => {
|
|
50
68
|
const stdout = outParts.join(''), stderr = errParts.join('');
|
|
69
|
+
cleanup();
|
|
51
70
|
try {
|
|
52
71
|
const parsed = JSON.parse(stdout);
|
|
53
72
|
resolve({
|
|
@@ -63,20 +82,6 @@ export function spawnScript(cmd, args, { timeout = 30000, cwd } = {}) {
|
|
|
63
82
|
resolve({ ok: false, output: stdout, error: stderr || ('exit ' + code) });
|
|
64
83
|
}
|
|
65
84
|
});
|
|
66
|
-
proc.on('error', (err) => resolve({ ok: false, output: '', error: err.message }));
|
|
85
|
+
proc.on('error', (err) => { cleanup(); resolve({ ok: false, output: '', error: err.message }); });
|
|
67
86
|
});
|
|
68
87
|
}
|
|
69
|
-
|
|
70
|
-
// --------------------------------------------------------------------------
|
|
71
|
-
// activity — Activity Line 计时器(显示 Running… + 实时计时)
|
|
72
|
-
// 调用 startActivity() 返回 stop 函数,进入新阶段时先 stop 再 start
|
|
73
|
-
// --------------------------------------------------------------------------
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* @param {import('@deepseek-ai/dsh-session').Session} session
|
|
77
|
-
* @returns {() => void} stop — 调用后停止计时
|
|
78
|
-
*/
|
|
79
|
-
export function startActivity(session) {
|
|
80
|
-
session.append('turn/start', { source: 'fancy-plugin' });
|
|
81
|
-
return () => session.append('turn/end', { source: 'fancy-plugin' });
|
|
82
|
-
}
|
package/package.json
CHANGED
|
@@ -80,8 +80,10 @@ export async function apply(ctx) {
|
|
|
80
80
|
|
|
81
81
|
notify(session, bootstrap.notify({ type: 'initializing', projectRoot }));
|
|
82
82
|
const stopActivity = startActivity(session);
|
|
83
|
-
const result = await spawnScript('node', [join(SCRIPTS_DIR, 'init.js'), projectRoot], {
|
|
84
|
-
|
|
83
|
+
const result = await spawnScript('node', [join(SCRIPTS_DIR, 'init.js'), projectRoot], {
|
|
84
|
+
timeout: 30000,
|
|
85
|
+
stop: stopActivity,
|
|
86
|
+
});
|
|
85
87
|
|
|
86
88
|
if (result.ok) {
|
|
87
89
|
notify(session, bootstrap.notify({ type: 'success' }));
|
|
@@ -97,9 +97,8 @@ export async function apply(ctx) {
|
|
|
97
97
|
'node',
|
|
98
98
|
[join(SCAN_SCRIPTS_DIR, 'run-scan.js'),
|
|
99
99
|
'--project-root', projectRoot, '--platform', platform, '--length', length],
|
|
100
|
-
{ timeout: 120000 }
|
|
100
|
+
{ timeout: 120000, stop: stopActivity }
|
|
101
101
|
);
|
|
102
|
-
stopActivity();
|
|
103
102
|
|
|
104
103
|
if (!scriptResult.ok) {
|
|
105
104
|
const err = (typeof scriptResult.error === 'object' && scriptResult.error !== null)
|
|
@@ -174,49 +174,27 @@ function spawnScraper(platform, length, outDir) {
|
|
|
174
174
|
return new Promise(async (resolve) => {
|
|
175
175
|
const { spawn } = await import('child_process');
|
|
176
176
|
const args = scraperArgs(platform, length, outDir);
|
|
177
|
-
const
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
resolve({ ok: true, output: out, stderr: '' });
|
|
199
|
-
} else if (portIdx < ports.length - 1) {
|
|
200
|
-
portIdx++;
|
|
201
|
-
process.stderr.write(` (失败)\n`);
|
|
202
|
-
tryPort(ports[portIdx]);
|
|
203
|
-
} else {
|
|
204
|
-
process.stderr.write(` (失败)\n`);
|
|
205
|
-
const errTail = out.trimEnd().slice(-300);
|
|
206
|
-
resolve({ ok: false, output: out, error: errTail || `exit ${code}` });
|
|
207
|
-
}
|
|
208
|
-
});
|
|
209
|
-
p.on('error', (e) => {
|
|
210
|
-
clearInterval(interval);
|
|
211
|
-
if (portIdx < ports.length - 1) {
|
|
212
|
-
portIdx++;
|
|
213
|
-
tryPort(ports[portIdx]);
|
|
214
|
-
} else {
|
|
215
|
-
resolve({ ok: false, output: '', error: e.message });
|
|
216
|
-
}
|
|
217
|
-
});
|
|
218
|
-
}
|
|
219
|
-
tryPort(ports[portIdx]);
|
|
177
|
+
const scraperScript = join(dirname(fileURLToPath(import.meta.url)), 'scrapers', args.script);
|
|
178
|
+
const fullArgs = [...args.extra];
|
|
179
|
+
|
|
180
|
+
process.stderr.write(`\n→ 启动采集脚本...`);
|
|
181
|
+
const p = spawn('node', [scraperScript, ...fullArgs], {
|
|
182
|
+
timeout: 300000,
|
|
183
|
+
stdio: ['ignore', 'pipe', 'inherit'],
|
|
184
|
+
});
|
|
185
|
+
let out = '';
|
|
186
|
+
p.stdout.on('data', d => { out += d.toString(); });
|
|
187
|
+
p.on('close', (code) => {
|
|
188
|
+
if (code === 0 && out.trim()) {
|
|
189
|
+
resolve({ ok: true, output: out, stderr: '' });
|
|
190
|
+
} else {
|
|
191
|
+
const errTail = out.trimEnd().slice(-500);
|
|
192
|
+
resolve({ ok: false, output: out, error: errTail || `exit ${code}` });
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
p.on('error', (e) => {
|
|
196
|
+
resolve({ ok: false, output: '', error: e.message });
|
|
197
|
+
});
|
|
220
198
|
});
|
|
221
199
|
}
|
|
222
200
|
|
|
@@ -400,7 +378,7 @@ async function main() {
|
|
|
400
378
|
console.error(` ❌ 平台 ${platform} 暂不支持采集`);
|
|
401
379
|
process.exit(1);
|
|
402
380
|
}
|
|
403
|
-
console.error(`→ 采集 ${PLATFORM_CN[platform]}
|
|
381
|
+
console.error(`→ 采集 ${PLATFORM_CN[platform]}...`);
|
|
404
382
|
const result = await spawnScraper(platform, length, scanDir);
|
|
405
383
|
if (!result.ok) {
|
|
406
384
|
console.error(` ❌ ${PLATFORM_CN[platform]} 采集失败:${result.error}`);
|
|
@@ -14,11 +14,9 @@
|
|
|
14
14
|
|
|
15
15
|
## Chrome CDP 环境要求
|
|
16
16
|
|
|
17
|
-
> ⚠️
|
|
18
|
-
>
|
|
19
|
-
>
|
|
20
|
-
> ```
|
|
21
|
-
> qidian 默认走 mobile-SSR(不需要 Chrome),失败才降级 CDP。
|
|
17
|
+
> ⚠️ **所有 scraper 现在使用 playwright-core 自己管理浏览器,不再依赖 agent-browser 和 Chrome CDP 端口。**
|
|
18
|
+
> 每个 scraper 独立 launch/close 浏览器进程,采集完成后自动关闭。
|
|
19
|
+
> 如需在采集前留时间登录,可传入 `--login-wait <秒>` 参数。
|
|
22
20
|
|
|
23
21
|
---
|
|
24
22
|
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* 工具函数 — 各平台采集脚本的公共依赖
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* 提供:
|
|
5
|
+
* getArg() — 命令行参数解析
|
|
6
|
+
* localDateStamp() — 本地日期戳(YYYYMMDD)
|
|
7
|
+
* runCli() — CLI 入口包装(含进程超时和信号处理)
|
|
8
|
+
* sleep() — 同步阻塞等待(Atomics.wait)
|
|
6
9
|
*
|
|
7
|
-
*
|
|
8
|
-
* node {SKILL_DIR}/browser-cdp/scripts/setup-cdp-chrome.js 9222
|
|
10
|
+
* 注意:cdp-utils 不再依赖 agent-browser/CDP 端口。浏览器生命周期由各 scraper 自己管理。
|
|
9
11
|
*/
|
|
10
12
|
|
|
11
13
|
const { execFileSync } = require("child_process");
|