xpzouying/xiaohongshu-mcp · error
等待商品选择弹窗超时
Error message
等待商品选择弹窗超时
What it means
waitForProductModal 在 10 秒轮询窗口内从未找到可见的 .multi-goods-selector-modal 元素:要么点击商品入口后弹窗未弹出(前端渲染失败),要么网络慢导致弹窗 10s 内未加载完成。
Source
Thrown at xiaohongshu/publish.go:1253
}
// waitForProductModal 等待商品选择弹窗出现
func waitForProductModal(page *rod.Page) (*rod.Element, error) {
deadline := time.Now().Add(10 * time.Second)
for time.Now().Before(deadline) {
modal, err := page.Element(".multi-goods-selector-modal")
if err == nil && modal != nil {
visible, _ := modal.Visible()
if visible {
slog.Info("商品选择弹窗已出现")
return modal, nil
}
}
time.Sleep(100 * time.Millisecond) // 缩短轮询间隔,更快响应
}
return nil, errors.New("等待商品选择弹窗超时")
}
// searchAndSelectProduct 搜索并选择商品
func searchAndSelectProduct(ctx context.Context, page *rod.Page, modal *rod.Element, keyword string) error {
slog.Info("搜索商品", "keyword", keyword)
// 1. 获取搜索框
searchInput, err := modal.Element(`input[placeholder="搜索商品ID 或 商品名称"]`)
if err != nil {
return errors.Wrap(err, "未找到商品搜索框")
}
// 2. 清空并输入关键词。SelectAllText 走 Eval(this.select()),只改选区、不额外
// 派发事件,暂时保留(换键盘全选要区分 Ctrl/Cmd)。
if err := searchInput.SelectAllText(); err != nil {
slog.Warn("选择搜索框文本失败", "error", err)
}
time.Sleep(100 * time.Millisecond)View on GitHub (pinned to 332d196854)
Solutions
- 先用浏览器手动复现,确认点击'添加商品'后弹窗是否出现及实际 DOM 结构
- 更新 waitForProductModal 中的弹窗选择器以匹配最新 DOM
- 确认账号已开通带货/商品权限且处于登录态
- 增加等待时长或提高轮询前的稳定性(如先等待网络空闲)
Example fix
// before
return nil, errors.New("等待商品选择弹窗超时")
// after
// 使用 rod 内置等待代替手动轮询,超时可配置
return nil, fmt.Errorf("等待商品选择弹窗超时 (waited %s)", timeout) Defensive patterns
Strategy: try-catch
Validate before calling
// 调用前确认登录态与页面
u := page.MustInfo().URL
if strings.Contains(u, "login") { return errors.New("未登录或被重定向") } Try / catch
if err := bindProducts(page, products); err != nil {
if strings.Contains(err.Error(), "等待商品选择弹窗超时") {
page.MustScreenshot("product-modal-timeout.png")
return skipProductBinding
}
return err
} Prevention
- 升级前先人工核对小红书发布页 DOM 是否变化
- 为弹窗等待设置可配置的超时并在失败时打印页面截图
- 确保账号处于登录态且有商品/带货权限
When it happens
Trigger: bindProducts → waitForProductModal:在发布页点击'添加商品'按钮后,弹窗选择器在超时窗口内始终匹配不到(弹窗没弹出、DOM 结构变了、页面被风控/跳转到登录、网络慢导致弹窗加载晚于超时)。
Common situations: 小红书前端改版导致弹窗 class 变化;账号无带货权限或店铺未开通导致点击后无响应;页面未登录或被重定向;低网速下弹窗渲染超过等待上限。
Related errors
AI-assisted analysis of xpzouying/xiaohongshu-mcp@332d196854 (2026-09-05).
Data as JSON: /api/errors/7e8af51034db4cc2.
Report an issue: GitHub.