{"record":{"id":"2a169620902576e0","repo":"xpzouying/xiaohongshu-mcp","slug":"error-2a1696","errorCode":null,"errorMessage":"设置原创声明失败（已请求原创，中止发布）","messagePattern":"设置原创声明失败（已请求原创，中止发布）","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"xiaohongshu/publish.go","lineNumber":396,"sourceCode":"\t\treturn err\n\t}\n\tslog.Info(\"检查正文长度：通过\")\n\n\tif scheduleTime != nil {\n\t\tif err := setSchedulePublish(ctx, page, *scheduleTime); err != nil {\n\t\t\treturn errors.Wrap(err, \"设置定时发布失败\")\n\t\t}\n\t\tslog.Info(\"定时发布设置完成\", \"schedule_time\", scheduleTime.Format(\"2006-01-02 15:04\"))\n\t}\n\n\tif err := setVisibility(page, visibility); err != nil {\n\t\treturn errors.Wrap(err, \"设置可见范围失败\")\n\t}\n\n\t// 处理原创声明：显式请求了原创但设置失败 → 报错中止，不静默发成非原创（避免\"以为原创其实不是\"）\n\tif isOriginal {\n\t\tif err := setOriginal(page); err != nil {\n\t\t\treturn errors.Wrap(err, \"设置原创声明失败（已请求原创，中止发布）\")\n\t\t}\n\t\tslog.Info(\"已声明原创\")\n\t}\n\n\tif err := bindProducts(ctx, page, products); err != nil {\n\t\treturn errors.Wrap(err, \"绑定商品失败\")\n\t}\n\n\tif err := clickPublishButton(page); err != nil {\n\t\treturn err\n\t}\n\n\t// 校验发布真的成功：成功后创作平台会跳转离开发布页；未跳转则判定失败，\n\t// 消除\"点了发布按钮就算成功\"的假阳性。\n\treturn waitPublishSuccess(page, 15*time.Second)\n}\n\n// waitPublishSuccess 轮询等待发布成功的信号：小红书发布成功后会跳转离开发布表单页","sourceCodeStart":378,"sourceCodeEnd":414,"githubUrl":"https://github.com/xpzouying/xiaohongshu-mcp/blob/332d196854a9eac0d2b8c2c0e3d0cc43139d724c/xiaohongshu/publish.go#L378-L414","documentation":"Raised in submitPublish when the caller explicitly requested isOriginal=true but setOriginal fails to check the original-content declaration on the publish form. The library deliberately aborts instead of silently publishing as non-original, so the user never mistakenly believes the note was declared original.","triggerScenarios":"Calling Publish with isOriginal=true while the original-declaration checkbox/toggle cannot be found, is disabled (e.g. account not eligible for original declaration), or cannot be clicked.","commonSituations":"Accounts without original-declaration privileges; Xiaohongshu UI change moving the original toggle; the toggle being greyed out for certain content types (e.g. video).","solutions":["Verify the account actually has original-declaration eligibility on the Xiaohongshu creator platform","If original is optional, call Publish with isOriginal=false","Retry; transient interactivity failures can resolve","Inspect the wrapped cause and update selectors if Xiaohongshu changed the DOM"],"exampleFix":"// before\nerr := xhs.Publish(..., isOriginal=true) // fails on ineligible account\n// after\nif !accountSupportsOriginal { \n    err := xhs.Publish(..., isOriginal=false)\n} else {\n    err := xhs.Publish(..., isOriginal=true)\n}","handlingStrategy":"validation","validationCode":"// 仅在账号已开通原创声明权限时请求原创\nif isOriginal && !accountHasOriginalPrivilege {\n    isOriginal = false\n}","typeGuard":null,"tryCatchPattern":"if err := xhs.Publish(...); err != nil {\n    if strings.Contains(err.Error(), \"设置原创声明失败\") {\n        // abort publishing or retry with isOriginal=false\n    }\n}","preventionTips":["Confirm account eligibility for original declaration first","Make isOriginal explicit, not defaulted true","Treat this error as fatal-by-design: never silently re-publish as non-original","Check the wrapped cause before changing selectors"],"tags":["browser-automation","rod","original-declaration"],"backgroundTag":"original-declaration-failed","analyzedSha":"332d196854a9eac0d2b8c2c0e3d0cc43139d724c","analyzedAt":"2026-09-05T22:22:55.988Z","contentChangedAt":"2026-09-05T22:22:55.988Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}