xpzouying/xiaohongshu-mcp · error

查找弹窗 footer 失败

Error message

查找弹窗 footer 失败

What it means

findFooterByText wraps the error from page.Elements("div.footer") with this message. It means rod failed to execute the selector query itself (page/browser closed, CDP error, evaluation failed), not that footers were missing — that case returns a different Errorf message (see error 212).

Source

Thrown at xiaohongshu/publish.go:1079

		}
		time.Sleep(300 * time.Millisecond)
		if isButtonDisabled(btn) {
			return errors.New("声明原创按钮仍处于禁用状态")
		}
	}

	if err := humanize.Click(btn); err != nil {
		return errors.Wrap(err, "点击声明原创按钮失败")
	}
	slog.Info("已成功点击声明原创按钮")
	time.Sleep(300 * time.Millisecond)
	return nil
}

func findFooterByText(page *rod.Page, keyword string) (*rod.Element, error) {
	footers, err := page.Elements("div.footer")
	if err != nil {
		return nil, errors.Wrap(err, "查找弹窗 footer 失败")
	}
	for _, footer := range footers {
		text, err := footer.Text()
		if err != nil {
			continue
		}
		if strings.Contains(text, keyword) {
			return footer, nil
		}
	}
	return nil, errors.Errorf("未找到包含%q的弹窗 footer", keyword)
}

// checkFooterCheckbox 勾选 footer 内的自定义 checkbox(未勾选时才点)。
func checkFooterCheckbox(footer *rod.Element) error {
	cb, err := footer.Element("div.d-checkbox")
	if err != nil {
		return errors.Wrap(err, "未找到须知 checkbox")

View on GitHub (pinned to 332d196854)

Solutions

  1. Check that the page/browser is still alive before calling the publish flow
  2. Re-navigate to the publish page and retry
  3. Verify the rod context isn't already canceled (ctx deadline exceeded)
  4. Look at the wrapped inner error — it carries the actual CDP/rod cause
Defensive patterns

Strategy: try-catch

Validate before calling

if _, err := page.Info(); err != nil {
    return fmt.Errorf("browser page unavailable before publish: %w", err)
}

Try / catch

if err := confirmOriginalDeclaration(page); err != nil {
    var wrapped *errors.wrapError
    if errors.As(err, &wrapped) && strings.Contains(wrapped.msg, "查找弹窗 footer 失败") {
        // page/context died: re-navigate and retry once
    }
}

Prevention

When it happens

Trigger: page.Elements("div.footer") is called on a page whose browser context is gone: tab closed, navigation destroyed the execution context, or the CDP connection dropped.

Common situations: Calling publish flows after the page was navigated away or the browser crashed; timeouts canceling the underlying context mid-query.

Related errors


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