{"record":{"id":"7d027d3c14941e12","repo":"jackwener/OpenCLI","slug":"no-note-detail-data-found-check-note-id-and-login","errorCode":null,"errorMessage":"No note detail data found. Check note_id and login status for creator.xiaohongshu.com.","messagePattern":"No note detail data found\\. Check note_id and login status for creator\\.xiaohongshu\\.com\\.","errorType":"exception","errorClass":"EmptyResultError","httpStatus":null,"severity":"warning","filePath":"clis/xiaohongshu/creator-note-detail.js","lineNumber":478,"sourceCode":"cli({\n    site: 'xiaohongshu',\n    name: 'creator-note-detail',\n    access: 'read',\n    description: '小红书单篇笔记详情页数据 (笔记信息 + 核心/互动数据 + 观看来源 + 观众画像 + 趋势数据)',\n    domain: 'creator.xiaohongshu.com',\n    strategy: Strategy.COOKIE,\n    browser: true,\n    navigateBefore: false,\n    args: [\n        { name: 'note-id', positional: true, type: 'string', required: true, help: 'Note ID (from creator-notes or note-detail page URL)' },\n    ],\n    columns: ['section', 'metric', 'value', 'extra'],\n    func: async (page, kwargs) => {\n        const noteId = kwargs['note-id'];\n        const rows = await fetchCreatorNoteDetailRows(page, noteId);\n        const hasCoreMetric = rows.some((row) => row.section !== '笔记信息' && row.value);\n        if (!hasCoreMetric) {\n            throw new EmptyResultError('xiaohongshu creator-note-detail', 'No note detail data found. Check note_id and login status for creator.xiaohongshu.com.');\n        }\n        return rows;\n    },\n});\n","sourceCodeStart":460,"sourceCodeEnd":483,"githubUrl":"https://github.com/jackwener/OpenCLI/blob/49907e53dc3ade5c223ff0c4c2c2785687cec4e6/clis/xiaohongshu/creator-note-detail.js#L460-L483","documentation":"EmptyResultError from the creator-note-detail command: fetchCreatorNoteDetailRows returned rows but none contained a non-empty value outside the '笔记信息' (note info) section, i.e. no usable detail metrics were extracted. The library treats an all-empty result as a failure rather than returning an empty table.","triggerScenarios":"The command ran while the datacenter detail payloads were empty (no stats for the note), the login session showed an empty dashboard, or the note_id pointed to a note the account cannot see — the page rendered but no metric rows had values.","commonSituations":"Not logged in (dashboard renders shell with no data); wrong/deleted note-id; brand-new note with zero statistics; account type without creator analytics; Xiaohongshu dashboard layout change broke row extraction.","solutions":["Verify you are logged into creator.xiaohongshu.com in the connected Chrome and the dashboard shows data manually.","Double-check the note-id matches a note visible in your creator dashboard.","Test with a note that has existing statistics/engagement data.","Re-run after logging in; check for earlier CommandExecutionErrors in the same run that hint at failed captures.","Update the CLI if the dashboard markup changed and rows no longer extract."],"exampleFix":"// before\nconst rows = await run('xiaohongshu creator-note-detail', { 'note-id': id });\n// after\ntry {\n  return await run('xiaohongshu creator-note-detail', { 'note-id': id });\n} catch (e) {\n  if (/No note detail data found/.test(e.message)) {\n    console.error('Check login at creator.xiaohongshu.com and note-id', id);\n  }\n  throw e;\n}","handlingStrategy":"try-catch","validationCode":"const noteId = String(args['note-id'] ?? '');\nif (!/^\\d+$/.test(noteId)) throw new Error('invalid note-id: ' + noteId);\nif (!await creatorDashboardHasData()) throw new Error('login to creator.xiaohongshu.com first');","typeGuard":null,"tryCatchPattern":"try {\n  return await run('xiaohongshu creator-note-detail', { 'note-id': id });\n} catch (e) {\n  if (/No note detail data found/.test(e.message)) {\n    // treat as 'no data for this note/login' — check auth, then surface to user\n    await ensureCreatorLogin();\n    throw new Error(`no detail data for note ${id}; verify login and note-id`);\n  }\n  throw e;\n}","preventionTips":["Confirm the dashboard shows the note's stats manually before automating.","Pick notes that already have engagement data.","Re-login when sessions age out.","Don't assume an empty result is a bug — it usually means no visible data for that session.","Watch for dashboard layout changes if this suddenly starts for all notes."],"tags":["empty-result","authentication","xiaohongshu","scraping"],"backgroundTag":"empty-scrape-result","analyzedSha":"49907e53dc3ade5c223ff0c4c2c2785687cec4e6","analyzedAt":"2026-08-29T08:14:47.543Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}