koishi-plugin-share-links-analysis 0.1.2-fix.1 → 0.1.2-fix.2

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.
@@ -34,42 +34,63 @@ async function refreshXhsCookie(ctx, config) {
34
34
  logger.warn('Puppeteer 服务未启用,无法自动刷新 Cookie。');
35
35
  return false;
36
36
  }
37
- logger.info('正在尝试使用 Puppeteer 自动刷新小红书 Cookie...');
37
+ logger.info('正在执行两步导航策略以刷新小红书 Cookie...');
38
+ let page = null;
38
39
  try {
39
- const page = await ctx.puppeteer.page();
40
+ page = await ctx.puppeteer.page();
40
41
  await page.setUserAgent(config.userAgent);
42
+ // --- 步骤 1: 访问首页,获取基础会话 Cookie (如 web_session) ---
43
+ logger.info('步骤 1/2: 访问首页以获取初始会话 Cookie...');
41
44
  try {
42
- await page.goto('https://www.xiaohongshu.com', {
43
- waitUntil: 'domcontentloaded',
45
+ await page.goto('https://www.xiaohongshu.com/', {
46
+ waitUntil: 'load',
44
47
  timeout: 10000
45
48
  });
49
+ }
50
+ catch (error) {
51
+ }
52
+ const initialCookies = await page.cookies();
53
+ logger.info(`步骤 1 完成, 获取到 ${initialCookies.length} 个初始 Cookie。`);
54
+ // --- 步骤 2: 访问 /explore 页面,触发反爬虫验证,获取安全 Cookie (如 acw_tc) ---
55
+ logger.info('步骤 2/2: 访问 /explore 页面以触发并获取安全 Cookie...');
56
+ try {
46
57
  await page.goto('https://www.xiaohongshu.com/explore', {
47
- waitUntil: 'domcontentloaded',
58
+ waitUntil: 'load',
48
59
  timeout: 10000
49
60
  });
50
61
  }
51
62
  catch (error) {
52
- logger.error('Puppeteer 访问小红书首页时发生错误:', error);
53
63
  }
54
- // 获取页面上的所有 Cookie
55
- const cookies = await page.cookies();
56
- if (cookies.length === 0) {
57
- logger.warn('Puppeteer 访问了页面,但未能获取到任何 Cookie。');
58
- await page.close();
64
+ // --- 步骤 3: 收集并验证最终合并的 Cookie ---
65
+ const finalCookies = await page.cookies();
66
+ if (finalCookies.length === 0) {
67
+ logger.warn('执行两步导航后,仍未能获取到任何 Cookie。');
59
68
  return false;
60
69
  }
61
- // Cookie 数组格式化为可用的字符串
62
- const cookieString = cookies.map((c) => `${c.name}=${c.value}`).join('; ');
63
- // 将新 Cookie 存入数据库
70
+ const hasWebSession = finalCookies.some((c) => c.name === 'web_session');
71
+ const hasAcwTc = finalCookies.some((c) => c.name === 'acw_tc');
72
+ const hasABRequestId = finalCookies.some((c) => c.name === 'abRequestId');
73
+ logger.info(`步骤 2 完成, 共获取到 ${finalCookies.length} 个最终 Cookie。`);
74
+ logger.info(`- 是否包含 'web_session': ${hasWebSession ? '是' : '否'}`);
75
+ logger.info(`- 是否包含 'acw_tc': ${hasAcwTc ? '是' : '否'}`);
76
+ logger.info(`- 是否包含 'abRequestId': ${hasABRequestId ? '是' : '否'}`);
77
+ if (!hasWebSession || !hasAcwTc || !hasABRequestId) {
78
+ logger.warn('关键 Cookie 缺失,本次刷新可能不完整。仍将尝试保存。');
79
+ }
80
+ const cookieString = finalCookies.map((c) => `${c.name}=${c.value}`).join('; ');
64
81
  await ctx.database.upsert('sla_cookie_cache', [{ platform: platformId, cookie: cookieString }]);
65
- logger.info('成功使用 Puppeteer 刷新并缓存了小红书 Cookie!');
66
- await page.close();
82
+ logger.info('成功执行两步刷新策略并缓存了小红书 Cookie!');
67
83
  return true;
68
84
  }
69
85
  catch (error) {
70
- logger.error('使用 Puppeteer 刷新 Cookie 时发生错误: ', error);
86
+ logger.error('在执行两步导航刷新 Cookie 时发生错误: ', error);
71
87
  return false;
72
88
  }
89
+ finally {
90
+ if (page) {
91
+ await page.close();
92
+ }
93
+ }
73
94
  }
74
95
  /**
75
96
  * 处理单个小红书链接
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "koishi-plugin-share-links-analysis",
3
3
  "description": "自用插件",
4
4
  "license": "MIT",
5
- "version": "0.1.2-fix.1",
5
+ "version": "0.1.2-fix.2",
6
6
  "main": "lib/index.js",
7
7
  "typings": "lib/index.d.ts",
8
8
  "files": [