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
- Re-query the input element right before SelectAllText to get a fresh handle.
- Retry SelectAllText once after a short wait; it is idempotent.
- Fall back to a JS-based selection or keyboard select-all if the custom input resists .select().
- 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
- Minimize delay between element lookup and interaction to avoid stale nodes.
- Verify the picker still uses a native input before relying on .select().
- Keep the page context alive for the whole publish flow (no navigation mid-step).
- Retry idempotent selection calls once on failure.
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.