xpzouying/xiaohongshu-mcp · error
查找日期时间输入框失败
Error message
查找日期时间输入框失败
What it means
Thrown by setDateTime when page.Element(".date-picker-container input") fails to find the date/time input. This input only exists after the schedule toggle was enabled and the date picker panel rendered, so the error means the picker input did not appear within rod's timeout.
Source
Thrown at xiaohongshu/publish.go:956
switchElem, err := page.Element(".post-time-wrapper .d-switch")
if err != nil {
return errors.Wrap(err, "查找定时发布开关失败")
}
if err := humanize.Click(switchElem); err != nil {
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 {
// 根据小红书创作者页面的实际结构:View on GitHub (pinned to 332d196854)
Solutions
- Verify schedule mode actually activated (switch checked) before setDateTime; retry the toggle click if not.
- Wait for the picker explicitly instead of a fixed sleep: page.Wait("() => !!document.querySelector('.date-picker-container input')").
- Dump page.HTML() on failure and update the selector if XHS changed the markup.
- Increase the Element timeout for slow-rendering environments.
Example fix
// before
time.Sleep(800 * time.Millisecond)
elem, err := page.Element(".date-picker-container input")
// after
time.Sleep(800 * time.Millisecond)
if err := page.Wait("() => !!document.querySelector('.date-picker-container input')"); err != nil {
return errors.Wrap(err, "日期时间面板未渲染")
}
elem, err := page.Element(".date-picker-container input") Defensive patterns
Strategy: validation
Validate before calling
if err := page.Wait("() => !!document.querySelector('.date-picker-container input')"); err != nil {
return fmt.Errorf("日期时间输入框未渲染: %w", err)
} Try / catch
if err := setSchedulePublish(ctx, page, t); err != nil {
if strings.Contains(err.Error(), "查找日期时间输入框失败") {
// 开关可能未生效:重开定时模式后重试一次
_ = clickScheduleSwitch(page)
time.Sleep(1 * time.Second)
return setSchedulePublish(ctx, page, t)
}
return err
} Prevention
- After clicking the schedule toggle, verify the switch is checked before proceeding.
- Replace fixed sleeps with explicit Wait conditions on the picker input.
- Dump page HTML on selector failures to detect XHS redesigns early.
- Keep generous timeouts for slow-network environments.
When it happens
Trigger: The toggle click did not actually enable schedule mode so the picker never renders; the picker renders with different markup after an XHS update; the fixed 800ms sleep in setSchedulePublish is too short and rod's Element timeout also expires.
Common situations: XHS redesigns the date-picker container class names; the switch was clicked but the front-end rejected it (schedule time constraints); slow rendering on weak networks.
Related errors
AI-assisted analysis of xpzouying/xiaohongshu-mcp@332d196854 (2026-09-05).
Data as JSON: /api/errors/76444fce517cc71a.
Report an issue: GitHub.