{"record":{"id":"7b789e7754f69594","repo":"xpzouying/xiaohongshu-mcp","slug":"w-7b789e","errorCode":null,"errorMessage":"未找到通知条目: %w","messagePattern":"未找到通知条目: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"xiaohongshu/notification_like.go","lineNumber":57,"sourceCode":"\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tresult := &NotificationLikeResult{\n\t\tCommentID: commentID,\n\t\tNickname:  target.from().Nickname,\n\t\tLiked:     want,\n\t}\n\n\tif target.Comment.Liked == want {\n\t\tresult.Skipped = true\n\t\tlogrus.Infof(\"通知点赞跳过（已是目标状态）: comment=%s liked=%v\", commentID, want)\n\t\treturn result, nil\n\t}\n\n\titems, err := page.Elements(`.tabs-content-container > .container`)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"未找到通知条目: %w\", err)\n\t}\n\tif index >= len(items) {\n\t\treturn nil, fmt.Errorf(\"通知条目渲染数(%d)少于目标位置(%d)，页面可能未加载完\", len(items), index)\n\t}\n\n\thumanize.Delay(ctx, humanize.Reading)\n\n\tbtn, err := items[index].Element(`.action-like .like-wrapper`)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"该通知没有点赞入口（评论可能已删除或不可点赞）: %w\", err)\n\t}\n\n\thumanize.Delay(ctx, humanize.BeforeClick)\n\tif err := humanize.Click(btn); err != nil {\n\t\treturn nil, fmt.Errorf(\"无法点击点赞: %w\", err)\n\t}\n\n\tif err := n.waitLikeSettled(page, commentID, want); err != nil {","sourceCodeStart":39,"sourceCodeEnd":75,"githubUrl":"https://github.com/xpzouying/xiaohongshu-mcp/blob/332d196854a9eac0d2b8c2c0e3d0cc43139d724c/xiaohongshu/notification_like.go#L39-L75","documentation":"Like 在通知页用 .tabs-content-container > .container 查找通知条目 DOM 时 page.Elements 报错：通知列表未渲染或页面结构变化。与渲染数不足的分支不同，这里是查询本身失败。","triggerScenarios":"locate 算出的 index 对应页面无 .tabs-content-container > .container 元素：未登录跳转、通知页结构改版、页面加载失败后仍执行查询。","commonSituations":"Cookie 失效被重定向到登录页；小红书前端改类名；页面加载中断（网络错误/验证码页）。","solutions":["确认登录态有效（Cookie 未过期，能正常打开通知页）","手动检查通知页 DOM，确认 .tabs-content-container > .container 选择器仍然有效","在 Elements 查询前增加 WaitLoad/WaitVisible 等待页面就绪","改版时更新 notification_like.go 中的选择器常量"],"exampleFix":"// before\nitems, err := page.Elements(`.tabs-content-container > .container`)\n// after\npage.MustWaitLoad()\n_ = page.WaitVisible(`.tabs-content-container > .container`, rod.WaitMax(30*time.Second))\nitems, err := page.Elements(`.tabs-content-container > .container`)","handlingStrategy":"retry","validationCode":"// 调用前确认页面停留在通知页\nurl := page.MustInfo().URL\nif !strings.HasPrefix(url, \"https://www.xiaohongshu.com/notification\") { return errors.New(\"not on notification page: \" + url) }","typeGuard":null,"tryCatchPattern":"_, err := n.Like(ctx, commentID, false)\nif err != nil && strings.Contains(err.Error(), \"未找到通知条目\") {\n    time.Sleep(2 * time.Second) // 等页面就绪后重试一次\n    _, err = n.Like(ctx, commentID, false)\n}","preventionTips":["确认登录态有效再操作通知页","操作前 MustWaitLoad 并等待关键选择器可见","关注前端改版，定期验证选择器","网络不稳时增加页面加载超时"],"tags":["go","rod","dom-selector","page-load"],"backgroundTag":"dom-element-not-found","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"}