xpzouying/xiaohongshu-mcp · error
feed %s %s失败:点击后状态始终未变为预期
Error message
feed %s %s失败:点击后状态始终未变为预期
What it means
toggleInteract 点击点赞/收藏后 4 秒内轮询 __INITIAL_STATE__ 状态始终未变成预期值(两次尝试均未确认):点击可能落空、状态同步延迟,或账号被限制互动。设计上宁可报错也不假阳性。
Source
Thrown at xiaohongshu/like_favorite.go:88
// 到达即成功;始终未变或无法读状态则返回 error——消除"点了没报错就算成功"的假阳性。
func (a *interactAction) toggleInteract(ctx context.Context, page *rod.Page, feedID, selector string, want bool, actionType interactActionType, pick stateOf) error {
for attempt := 1; attempt <= 2; attempt++ {
if err := a.performClick(page, selector); err != nil {
return fmt.Errorf("%s点击失败: %w", actionType, err)
}
ok, err := a.waitInteractState(page, feedID, want, pick, 4*time.Second)
if err != nil {
return fmt.Errorf("%s后无法确认状态: %w", actionType, err)
}
if ok {
humanize.Delay(ctx, humanize.AfterInteract)
logrus.Infof("feed %s %s成功(第%d次点击)", feedID, actionType, attempt)
return nil
}
logrus.Warnf("feed %s %s第%d次点击后状态未变,重试", feedID, actionType, attempt)
}
return fmt.Errorf("feed %s %s失败:点击后状态始终未变为预期", feedID, actionType)
}
// waitInteractState 轮询 __INITIAL_STATE__ 的交互状态,直到 pick()==want 或超时。
// 状态回写快则立即返回、慢则等满 timeout。
func (a *interactAction) waitInteractState(page *rod.Page, feedID string, want bool, pick stateOf, timeout time.Duration) (bool, error) {
deadline := time.Now().Add(timeout)
for {
liked, collected, err := a.getInteractState(page, feedID)
if err != nil {
return false, err
}
if pick(liked, collected) == want {
return true, nil
}
if time.Now().After(deadline) {
return false, nil
}
time.Sleep(500 * time.Millisecond)View on GitHub (pinned to 332d196854)
Solutions
- 读取当前点赞/收藏状态确认是否实际生效
- 若未生效则稍后重试一次
- 检查账号是否被限流
Defensive patterns
Strategy: retry
When it happens
Trigger: Thrown at xiaohongshu/like_favorite.go:88 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of xpzouying/xiaohongshu-mcp@332d196854 (2026-09-05).
Data as JSON: /api/errors/a88cb7ff918a6023.
Report an issue: GitHub.