xpzouying/xiaohongshu-mcp · error

无法点击点赞: %w

Error message

无法点击点赞: %w

What it means

Like 找到点赞按钮后 humanize.Click 点击失败:按钮被遮挡、条目重渲染或鼠标事件被拦截,点赞动作没有送达页面。

Source

Thrown at xiaohongshu/notification_like.go:72

	items, err := page.Elements(`.tabs-content-container > .container`)
	if err != nil {
		return nil, fmt.Errorf("未找到通知条目: %w", err)
	}
	if index >= len(items) {
		return nil, fmt.Errorf("通知条目渲染数(%d)少于目标位置(%d),页面可能未加载完", len(items), index)
	}

	humanize.Delay(ctx, humanize.Reading)

	btn, err := items[index].Element(`.action-like .like-wrapper`)
	if err != nil {
		return nil, fmt.Errorf("该通知没有点赞入口(评论可能已删除或不可点赞): %w", err)
	}

	humanize.Delay(ctx, humanize.BeforeClick)
	if err := humanize.Click(btn); err != nil {
		return nil, fmt.Errorf("无法点击点赞: %w", err)
	}

	if err := n.waitLikeSettled(page, commentID, want); err != nil {
		return nil, err
	}

	humanize.Delay(ctx, humanize.AfterInteract)

	logrus.Infof("通知点赞成功: comment=%s liked=%v", commentID, want)
	return result, nil
}

// waitLikeSettled 等待点赞状态变成目标值;判不出来直接报错,不自动重试。
func (n *NotificationAction) waitLikeSettled(page *rod.Page, commentID string, want bool) error {
	if n.likedMatches(page, commentID, want, likeSettleTimeout) {
		return nil
	}
	return fmt.Errorf("点赞未确认成功:%s 内状态未变成 %v。点赞可能已生效但同步慢,"+

View on GitHub (pinned to 332d196854)

Solutions

  1. 重试整个 Like 操作(重新定位元素后再点)
  2. 点击前检查弹层并关闭遮挡元素
  3. 减小/调整 BeforeClick 延迟,或点击前重新获取元素引用
  4. 若频繁失败,检查页面是否触发风控验证

Example fix

// before
if err := humanize.Click(btn); err != nil { return nil, fmt.Errorf("无法点击点赞: %w", err) }
// after
if err := humanize.Click(btn); err != nil {
    btn, err = items[index].Element(`.action-like .like-wrapper`) // 重新获取
    if err == nil { err = humanize.Click(btn) }
    if err != nil { return nil, fmt.Errorf("无法点击点赞: %w", err) }
}
Defensive patterns

Strategy: retry

Try / catch

_, err := n.Like(ctx, commentID, false)
if err != nil && strings.Contains(err.Error(), "无法点击点赞") {
    time.Sleep(time.Second) // 等渲染稳定后重试
    _, err = n.Like(ctx, commentID, false)
}

Prevention

When it happens

Trigger: Like 中对 btn 调用 humanize.Click 出错:页面在 BeforeClick 延迟期间发生重渲染,按钮被替换;元素滚出视口;页面被弹层遮挡。

Common situations: 列表在延迟期间刷新导致元素失效;动画未完成元素不可点;页面弹出登录/验证弹层。

Related errors


AI-assisted analysis of xpzouying/xiaohongshu-mcp@332d196854 (2026-09-05). Data as JSON: /api/errors/86d9d54b84c794c2. Report an issue: GitHub.