xpzouying/xiaohongshu-mcp · error
页面状态里没有分区 %s,可能未登录或页面结构已变化
Error message
页面状态里没有分区 %s,可能未登录或页面结构已变化
What it means
readTab 的空值守卫:page.Eval 成功但 notificationMap 中没有请求的 tab 分区(返回空串):大概率未登录(无通知数据注入)或前端状态结构变化导致分区缺失。
Source
Thrown at xiaohongshu/notification.go:298
return r.UserInfo
}
return r.User
}
// readTab 读取指定分区的原始数据,字段映射由结构体承担。
func (n *NotificationAction) readTab(page *rod.Page, tab NotificationTab) (*notificationPayload, error) {
res, err := page.Eval(`(tab) => {
const s = window.__INITIAL_STATE__;
const m = s && s.notification && s.notification.notificationMap;
return m && m[tab] ? JSON.stringify(m[tab]) : "";
}`, string(tab))
if err != nil {
return nil, fmt.Errorf("读取通知列表失败: %w", err)
}
raw := res.Value.String()
if raw == "" {
return nil, fmt.Errorf("页面状态里没有分区 %s,可能未登录或页面结构已变化", tab)
}
var payload notificationPayload
if err := json.Unmarshal([]byte(raw), &payload); err != nil {
return nil, fmt.Errorf("解析通知列表失败: %w", err)
}
return &payload, nil
}
// visible 判断一条通知的内容是否仍然正常可见。
func (r rawNotification) visible() bool {
if r.Comment.ID != "" && r.Comment.Illegal.Status != "" && r.Comment.Illegal.Status != statusNormal {
return false
}
if r.Item.ID != "" && r.Item.Illegal.Status != "" && r.Item.Illegal.Status != statusNormal {
return false
}
return trueView on GitHub (pinned to 332d196854)
Solutions
- 先调用确认登录态的接口或检查 Cookie 是否有效,重新注入登录态
- 手动打开 https://www.xiaohongshu.com/notification 检查 __INITIAL_STATE__ 结构
- 确认传入的 tab 值与 NotificationTab 常量一致
- 等待页面加载完成(MustWaitLoad + sleep)后重试一次
Example fix
// before
raw := res.Value.String()
if raw == "" { return nil, fmt.Errorf("页面状态里没有分区 %s,可能未登录或页面结构已变化", tab) }
// after
raw := res.Value.String()
if raw == "" {
if !loggedIn(page) { refreshCookies(); page.MustNavigate(notificationURL).MustWaitLoad() }
return nil, fmt.Errorf("页面状态里没有分区 %s,可能未登录或页面结构已变化", tab)
} Defensive patterns
Strategy: fallback
Validate before calling
// 调用前检查登录态 info, err := page.Eval(`() => !!window.__INITIAL_STATE__ && !!window.__INITIAL_STATE__.user && window.__INITIAL_STATE__.user.loggedIn`)
Try / catch
items, err := n.List(ctx)
if err != nil && strings.Contains(err.Error(), "可能未登录") {
// 刷新登录态/Cookie 后 fallback 重试
reloadCookies()
items, err = n.List(ctx)
} Prevention
- 定期刷新并校验 Cookie 有效性
- 调用前先检查页面 URL 未被重定向到登录页
- 避免高频访问触发异常/验证页
- 页面加载完成后稍作等待再读取状态
When it happens
Trigger: List/locate/likedMatches 调用 readTab 且 notificationMap[tab] 不存在:未登录被重定向、页面未完成水合、小红书改版后 __INITIAL_STATE__ 结构变化、tab 名对应分区在当前账号不可见。
Common situations: Cookie 过期导致未登录状态;自动化访问太快页面停留在异常/验证页;前端版本升级把 notificationMap 改名或移动。
Related errors
AI-assisted analysis of xpzouying/xiaohongshu-mcp@332d196854 (2026-09-05).
Data as JSON: /api/errors/9eaf0366b825d5dc.
Report an issue: GitHub.