{"record":{"id":"c042f69590581d95","repo":"xpzouying/xiaohongshu-mcp","slug":"error-c042f6","errorCode":null,"errorMessage":"选择日期时间文本失败","messagePattern":"选择日期时间文本失败","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"xiaohongshu/publish.go","lineNumber":962,"sourceCode":"\t\treturn errors.Wrap(err, \"点击定时发布开关失败\")\n\t}\n\tslog.Info(\"已点击定时发布开关\")\n\treturn nil\n}\n\n// setDateTime 设置日期时间\nfunc setDateTime(ctx context.Context, page *rod.Page, t time.Time) error {\n\tdateTimeStr := t.Format(\"2006-01-02 15:04\")\n\n\telem, err := page.Element(\".date-picker-container input\")\n\tif err != nil {\n\t\treturn errors.Wrap(err, \"查找日期时间输入框失败\")\n\t}\n\n\t// SelectAllText 走 Eval(this.select())，只改选区、不额外派发事件，暂时保留。\n\t// 换成键盘全选要区分 Ctrl/Cmd，换成三击又可能触发日期控件的其他行为。\n\tif err := elem.SelectAllText(); err != nil {\n\t\treturn errors.Wrap(err, \"选择日期时间文本失败\")\n\t}\n\tif err := humanize.Type(ctx, elem, dateTimeStr); err != nil {\n\t\treturn errors.Wrap(err, \"输入日期时间失败\")\n\t}\n\tslog.Info(\"已设置日期时间\", \"datetime\", dateTimeStr)\n\n\treturn nil\n}\n\n// setOriginal 设置原创声明\nfunc setOriginal(page *rod.Page) error {\n\t// 根据小红书创作者页面的实际结构：\n\t// div.custom-switch-card 包含 span.has-tips 文本为\"原创声明\"\n\t// 开关是 div.d-switch 组件\n\n\t// 查找包含\"原创声明\"文本的 custom-switch-card\n\tswitchCards, err := page.Elements(\"div.custom-switch-card\")\n\tif err != nil {","sourceCodeStart":944,"sourceCodeEnd":980,"githubUrl":"https://github.com/xpzouying/xiaohongshu-mcp/blob/332d196854a9eac0d2b8c2c0e3d0cc43139d724c/xiaohongshu/publish.go#L944-L980","documentation":"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.","triggerScenarios":"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.","commonSituations":"React/Vue re-renders of the picker after a prior click; headless environment quirks; long gaps between lookup and selection while the page updates.","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)."],"exampleFix":"// before\nif err := elem.SelectAllText(); err != nil {\n\treturn errors.Wrap(err, \"选择日期时间文本失败\")\n}\n// after\nif err := elem.SelectAllText(); err != nil {\n\telem, err = page.Element(\".date-picker-container input\")\n\tif err != nil {\n\t\treturn errors.Wrap(err, \"查找日期时间输入框失败\")\n\t}\n\tif err := elem.SelectAllText(); err != nil {\n\t\treturn errors.Wrap(err, \"选择日期时间文本失败\")\n\t}\n}","handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"if err := elem.SelectAllText(); err != nil {\n\t// 元素可能被重渲染：重新查找并重试一次\n\telem, ferr := page.Element(\".date-picker-container input\")\n\tif ferr != nil {\n\t\treturn fmt.Errorf(\"选择日期时间文本失败: %w\", err)\n\t}\n\tif ferr := elem.SelectAllText(); ferr != nil {\n\t\treturn fmt.Errorf(\"选择日期时间文本失败: %w\", ferr)\n\t}\n}","preventionTips":["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."],"tags":["js-eval-failed","go-rod","stale-element","automation"],"backgroundTag":"element-click-failed","analyzedSha":"332d196854a9eac0d2b8c2c0e3d0cc43139d724c","analyzedAt":"2026-09-05T22:22:55.988Z","contentChangedAt":"2026-09-05T22:22:55.988Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}