{"record":{"id":"854d69195d651bc9","repo":"xpzouying/xiaohongshu-mcp","slug":"error-854d69","errorCode":null,"errorMessage":"等待弹窗关闭超时","messagePattern":"等待弹窗关闭超时","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"xiaohongshu/publish.go","lineNumber":1380,"sourceCode":"\treturn nil\n}\n\n// waitForModalClose 等待弹窗关闭\nfunc waitForModalClose(page *rod.Page) error {\n\tdeadline := time.Now().Add(5 * time.Second)\n\tslog.Info(\"开始等待弹窗关闭\")\n\n\tfor time.Now().Before(deadline) {\n\t\t// 使用 Has 代替 Element，避免等待元素出现的阻塞\n\t\thas, _, err := page.Has(\".multi-goods-selector-modal\")\n\t\tif err != nil || !has {\n\t\t\tslog.Info(\"弹窗已关闭\")\n\t\t\treturn nil\n\t\t}\n\t\ttime.Sleep(200 * time.Millisecond)\n\t}\n\n\treturn errors.New(\"等待弹窗关闭超时\")\n}\n","sourceCodeStart":1362,"sourceCodeEnd":1382,"githubUrl":"https://github.com/xpzouying/xiaohongshu-mcp/blob/332d196854a9eac0d2b8c2c0e3d0cc43139d724c/xiaohongshu/publish.go#L1362-L1382","documentation":"waitForModalClose 轮询 5 秒后 .multi-goods-selector-modal 仍存在于 DOM：确认按钮点击后弹窗未真正关闭，可能是选择未生效或页面渲染卡住。","triggerScenarios":"bindProducts → searchAndSelectProduct 完成选择后，弹窗关闭动作（确认按钮点击/自动关闭）在等待窗口内未发生：确认按钮选择器失效、商品搜索无结果导致弹窗停在报错态、点击事件未生效。","commonSituations":"小红书弹窗 DOM 改版导致确认按钮定位失败；搜索关键词匹配不到商品，弹窗停留在空结果页；页面卡顿/JS 报错阻断关闭逻辑。","solutions":["手动复现绑定流程，观察选择商品后弹窗是否正常关闭","检查 searchAndSelectProduct 中确认按钮的点击是否成功，必要时校验点击后的 DOM 状态","更新弹窗关闭检测所用选择器","延长超时窗口，并在超时错误中附带当前页面截图/HTML 便于排查"],"exampleFix":"// before\nreturn errors.New(\"等待弹窗关闭超时\")\n// after\nhtml, _ := page.HTML()\nreturn fmt.Errorf(\"等待弹窗关闭超时, page snapshot: %.500s\", html)","handlingStrategy":"try-catch","validationCode":"// 选择商品前确认搜索结果非空，否则弹窗不会关闭\nif !modalContainsResults(modal) { return errors.New(\"商品搜索无结果\") }","typeGuard":null,"tryCatchPattern":"if err := bindProducts(page, products); err != nil {\n\tif strings.Contains(err.Error(), \"等待弹窗关闭超时\") {\n\t\tpage.MustScreenshot(\"modal-close-timeout.png\")\n\t\t_ = tryCloseModal(page) // 兜底：ESC/关闭按钮\n\t}\n\treturn err\n}","preventionTips":["确认搜索关键词能匹配到商品再执行绑定","维护关闭按钮选择器并加入失败重试","超时后主动关闭弹窗，避免影响后续发布步骤"],"tags":["timeout","ui-automation","modal","xiaohongshu"],"backgroundTag":"element-wait-timeout","analyzedSha":"332d196854a9eac0d2b8c2c0e3d0cc43139d724c","analyzedAt":"2026-09-05T22:22:55.988Z","contentChangedAt":"2026-09-05T22:22:55.988Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}