xpzouying/xiaohongshu-mcp · error

选择日期时间文本失败

Error message

选择日期时间文本失败

What it means

Thrown by setDateTime when elem.SelectAllText() fails. SelectAllText executes Eval('this.select()') on the input; the JS evaluation fails if the element was detached from the DOM, the input is not a selectable text input, or the page/context was closed.

Source

Thrown at xiaohongshu/publish.go:962

		return errors.Wrap(err, "点击定时发布开关失败")
	}
	slog.Info("已点击定时发布开关")
	return nil
}

// setDateTime 设置日期时间
func setDateTime(ctx context.Context, page *rod.Page, t time.Time) error {
	dateTimeStr := t.Format("2006-01-02 15:04")

	elem, err := page.Element(".date-picker-container input")
	if err != nil {
		return errors.Wrap(err, "查找日期时间输入框失败")
	}

	// SelectAllText 走 Eval(this.select()),只改选区、不额外派发事件,暂时保留。
	// 换成键盘全选要区分 Ctrl/Cmd,换成三击又可能触发日期控件的其他行为。
	if err := elem.SelectAllText(); err != nil {
		return errors.Wrap(err, "选择日期时间文本失败")
	}
	if err := humanize.Type(ctx, elem, dateTimeStr); err != nil {
		return errors.Wrap(err, "输入日期时间失败")
	}
	slog.Info("已设置日期时间", "datetime", dateTimeStr)

	return nil
}

// setOriginal 设置原创声明
func setOriginal(page *rod.Page) error {
	// 根据小红书创作者页面的实际结构:
	// div.custom-switch-card 包含 span.has-tips 文本为"原创声明"
	// 开关是 div.d-switch 组件

	// 查找包含"原创声明"文本的 custom-switch-card
	switchCards, err := page.Elements("div.custom-switch-card")
	if err != nil {

View on GitHub (pinned to 332d196854)

Solutions

  1. Re-query the input element right before SelectAllText to get a fresh handle.
  2. Retry SelectAllText once after a short wait; it is idempotent.
  3. Fall back to a JS-based selection or keyboard select-all if the custom input resists .select().
  4. Check that the page context is still alive (not closed/navigated).

Example fix

// before
if err := elem.SelectAllText(); err != nil {
	return errors.Wrap(err, "选择日期时间文本失败")
}
// after
if err := elem.SelectAllText(); err != nil {
	elem, err = page.Element(".date-picker-container input")
	if err != nil {
		return errors.Wrap(err, "查找日期时间输入框失败")
	}
	if err := elem.SelectAllText(); err != nil {
		return errors.Wrap(err, "选择日期时间文本失败")
	}
}
Defensive patterns

Strategy: retry

Try / catch

if err := elem.SelectAllText(); err != nil {
	// 元素可能被重渲染:重新查找并重试一次
	elem, ferr := page.Element(".date-picker-container input")
	if ferr != nil {
		return fmt.Errorf("选择日期时间文本失败: %w", err)
	}
	if ferr := elem.SelectAllText(); ferr != nil {
		return fmt.Errorf("选择日期时间文本失败: %w", ferr)
	}
}

Prevention

When it happens

Trigger: The picker input was re-rendered between the Element() lookup and SelectAllText (stale element); XHS replaced the native input with a custom component that ignores .select(); the page navigated or closed mid-operation.

Common situations: React/Vue re-renders of the picker after a prior click; headless environment quirks; long gaps between lookup and selection while the page updates.

Related errors


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