xpzouying/xiaohongshu-mcp · error
等待弹窗关闭超时
Error message
等待弹窗关闭超时
What it means
waitForModalClose 轮询 5 秒后 .multi-goods-selector-modal 仍存在于 DOM:确认按钮点击后弹窗未真正关闭,可能是选择未生效或页面渲染卡住。
Source
Thrown at xiaohongshu/publish.go:1380
return nil
}
// waitForModalClose 等待弹窗关闭
func waitForModalClose(page *rod.Page) error {
deadline := time.Now().Add(5 * time.Second)
slog.Info("开始等待弹窗关闭")
for time.Now().Before(deadline) {
// 使用 Has 代替 Element,避免等待元素出现的阻塞
has, _, err := page.Has(".multi-goods-selector-modal")
if err != nil || !has {
slog.Info("弹窗已关闭")
return nil
}
time.Sleep(200 * time.Millisecond)
}
return errors.New("等待弹窗关闭超时")
}
View on GitHub (pinned to 332d196854)
Solutions
- 手动复现绑定流程,观察选择商品后弹窗是否正常关闭
- 检查 searchAndSelectProduct 中确认按钮的点击是否成功,必要时校验点击后的 DOM 状态
- 更新弹窗关闭检测所用选择器
- 延长超时窗口,并在超时错误中附带当前页面截图/HTML 便于排查
Example fix
// before
return errors.New("等待弹窗关闭超时")
// after
html, _ := page.HTML()
return fmt.Errorf("等待弹窗关闭超时, page snapshot: %.500s", html) Defensive patterns
Strategy: try-catch
Validate before calling
// 选择商品前确认搜索结果非空,否则弹窗不会关闭
if !modalContainsResults(modal) { return errors.New("商品搜索无结果") } Try / catch
if err := bindProducts(page, products); err != nil {
if strings.Contains(err.Error(), "等待弹窗关闭超时") {
page.MustScreenshot("modal-close-timeout.png")
_ = tryCloseModal(page) // 兜底:ESC/关闭按钮
}
return err
} Prevention
- 确认搜索关键词能匹配到商品再执行绑定
- 维护关闭按钮选择器并加入失败重试
- 超时后主动关闭弹窗,避免影响后续发布步骤
When it happens
Trigger: bindProducts → searchAndSelectProduct 完成选择后,弹窗关闭动作(确认按钮点击/自动关闭)在等待窗口内未发生:确认按钮选择器失效、商品搜索无结果导致弹窗停在报错态、点击事件未生效。
Common situations: 小红书弹窗 DOM 改版导致确认按钮定位失败;搜索关键词匹配不到商品,弹窗停留在空结果页;页面卡顿/JS 报错阻断关闭逻辑。
Related errors
AI-assisted analysis of xpzouying/xiaohongshu-mcp@332d196854 (2026-09-05).
Data as JSON: /api/errors/854d69195d651bc9.
Report an issue: GitHub.