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

  1. Extend the context deadline proportional to content length
  2. Retry typing with a fresh element lookup on failure
  3. Ensure the editor is focused/visible before typing (click it first)
  4. 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

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.