xpzouying/xiaohongshu-mcp · error
查找正文候选元素失败
Error message
查找正文候选元素失败
What it means
findTextboxByPlaceholder wraps failure from page.Elements("p") when enumerating candidate content paragraphs. This error means rod could not execute the query for <p> elements on the publish page, typically a CDP-level failure rather than 'no elements found' (that returns a separate error).
Source
Thrown at xiaohongshu/publish.go:761
firstItem, err := topicContainer.Element(".item")
if err != nil || firstItem == nil {
slog.Warn("未找到标签联想选项,直接输入空格", "tag", tag)
return humanize.Type(ctx, contentElem, " ")
}
if err := humanize.Click(firstItem); err != nil {
return errors.Wrap(err, "点击标签联想选项失败")
}
slog.Info("成功点击标签联想选项", "tag", tag)
time.Sleep(500 * time.Millisecond) // 技术等待:等标签处理完成
return nil
}
func findTextboxByPlaceholder(page *rod.Page) (*rod.Element, error) {
elements, err := page.Elements("p")
if err != nil {
return nil, errors.Wrap(err, "查找正文候选元素失败")
}
if len(elements) == 0 {
return nil, errors.New("no p elements found")
}
placeholderElem := findPlaceholderElement(elements, "输入正文描述")
if placeholderElem == nil {
return nil, errors.New("no placeholder element found")
}
textboxElem := findTextboxParent(placeholderElem)
if textboxElem == nil {
return nil, errors.New("no textbox parent found")
}
return textboxElem, nil
}
View on GitHub (pinned to 332d196854)
Solutions
- Verify the page is alive before searching (e.g., page.Info() or page.MustWaitStable pattern).
- Re-navigate/reload the publish page if the session is stale, then retry.
- Check the rod browser connection and re-connect if the CDP websocket dropped.
- Wrap with a short retry since transient CDP races are common.
Example fix
// before
elements, err := page.Elements("p")
// after
if _, err := page.Info(); err != nil {
return nil, errors.Wrap(err, "页面已失效,请重新打开发布页")
}
elements, err := page.Elements("p") Defensive patterns
Strategy: try-catch
Validate before calling
if _, err := page.Info(); err != nil { return errors.Wrap(err, "页面已失效") } Type guard
func pageAlive(p *rod.Page) bool { _, err := p.Info(); return err == nil } Try / catch
contentElem, err := findContentElement(page)
if err != nil {
if strings.Contains(err.Error(), "查找正文候选元素失败") {
return errors.New("发布页不可用,请重新打开后再试")
}
return err
} Prevention
- Check page liveness before DOM queries
- Reopen the publish page after navigation
- Handle browser disconnects at the session level
When it happens
Trigger: Calling findContentElement when the page object is invalid, the tab was closed, the CDP connection dropped, or page.Elements hit a navigation/race while querying.
Common situations: Browser closed mid-flow; page navigated between publish steps; remote browser endpoint unreachable; using a stale rod.Page after the tab crashed.
Related errors
AI-assisted analysis of xpzouying/xiaohongshu-mcp@332d196854 (2026-09-05).
Data as JSON: /api/errors/d9e16fdffe86a8de.
Report an issue: GitHub.