xpzouying/xiaohongshu-mcp · error
输入正文失败
Error message
输入正文失败
What it means
submitPublishVideo 定位到正文内容元素后 humanize.Type 填写正文(含标签)失败:contenteditable 元素失焦、被重置或输入被前端拦截。
Source
Thrown at xiaohongshu/publish_video.go:121
// submitPublishVideo 填写标题、正文、标签并点击发布(等待按钮可点击后再提交)
func submitPublishVideo(ctx context.Context, page *rod.Page, title, content string, tags []string, scheduleTime *time.Time, visibility string, products []string) error {
// 标题
titleElem, err := page.Element("div.d-input input")
if err != nil {
return errors.Wrap(err, "查找标题输入框失败")
}
if err := humanize.Type(ctx, titleElem, title); err != nil {
return errors.Wrap(err, "输入标题失败")
}
humanize.Delay(ctx, humanize.AfterType)
// 正文 + 标签
contentElem, err := getContentElement(page, contentElemTimeout)
if err != nil {
return err
}
if err := humanize.Type(ctx, contentElem, content); err != nil {
return errors.Wrap(err, "输入正文失败")
}
if err := waitAndClickTitleInput(titleElem); err != nil {
return err
}
if err := inputTags(ctx, contentElem, tags); err != nil {
return err
}
humanize.Delay(ctx, humanize.AfterType)
// 处理定时发布
if scheduleTime != nil {
if err := setSchedulePublish(ctx, page, *scheduleTime); err != nil {
return errors.Wrap(err, "设置定时发布失败")
}
slog.Info("定时发布设置完成", "schedule_time", scheduleTime.Format("2006-01-02 15:04"))
}
View on GitHub (pinned to 332d196854)
Solutions
- Extend the context deadline proportional to content length
- Retry typing with a fresh element lookup on failure
- Ensure the editor is focused/visible before typing (click it first)
- Check content size and strip problematic characters before publishing
Example fix
// before
if err := humanize.Type(ctx, contentElem, content); err != nil {
return errors.Wrap(err, "输入正文失败")
}
// after
if err := contentElem.Click(input.Left); err != nil { return err }
if err := humanize.Type(ctx, contentElem, content); err != nil {
return errors.Wrap(err, "输入正文失败")
} Defensive patterns
Strategy: retry
Validate before calling
if visible, err := contentElem.Visible(); err != nil || !visible {
return errors.New("content editor not visible")
} Try / catch
if err := humanize.Type(ctx, contentElem, content); err != nil {
contentElem, ferr := getContentElement(page, contentElemTimeout)
if ferr != nil { return ferr }
if terr := humanize.Type(ctx, contentElem, content); terr != nil {
return errors.Wrap(terr, "输入正文失败")
}
} Prevention
- Click/focus the editor before typing
- Scale the context timeout with content length
- Re-find the element on any typing failure
- Sanitize content (no control chars) before publishing
When it happens
Trigger: humanize.Type(ctx, contentElem, content) errors: element detached after re-render, ctx cancelled/deadline exceeded while typing long content, or the editable region is not focusable at typing time.
Common situations: Very long body text exceeding the humanize typing budget within the context deadline; editor re-render triggered by the tag section; focus stolen by a popup; page became unresponsive during long video processing.
Related errors
AI-assisted analysis of xpzouying/xiaohongshu-mcp@332d196854 (2026-09-05).
Data as JSON: /api/errors/9528ca01fe2dee31.
Report an issue: GitHub.