xpzouying/xiaohongshu-mcp · error

读取筛选面板失败: %w

Error message

读取筛选面板失败: %w

What it means

findFilterOption 用 div.filter-panel div.filters 读取筛选面板分组时 page.Elements 报错:筛选面板未打开/未渲染,或选择器与当前页面结构不符。

Source

Thrown at xiaohongshu/search.go:213

			return
		}
		time.Sleep(300 * time.Millisecond)
	}
	logrus.Warnf("筛选后等待结果刷新超时(%s),返回的可能是筛选前的数据", timeout)
}

// findFilterOption 在筛选面板里定位一个选项:按标签找到组,再在组内按文本找选项。
//
// 全程不用序号。同一个选项在面板里可能渲染成多个 div.tags(数量随视口而变,
// 且首项是否重复各组不一致),下标对不齐;早前用 div.tags:nth-child(N) 会选错项。
// 多份重复的位置尺寸完全相同,取第一个点下去落在同一处。
//
// 作用域必须限定在 div.filter-panel 内且只认 div.tags:页面别处存在同文本的
// 可见元素(顶部频道栏的「图文」「视频」、标签「综合」),放宽会点错地方。
func findFilterOption(page *rod.Page, pf pendingFilter) (*rod.Element, error) {
	groups, err := page.Elements("div.filter-panel div.filters")
	if err != nil {
		return nil, fmt.Errorf("读取筛选面板失败: %w", err)
	}

	for _, group := range groups {
		// 组标签是 div.filters 下的直接子 span
		label, err := group.Element(":scope > span")
		if err != nil {
			continue
		}
		text, err := label.Text()
		if err != nil || strings.TrimSpace(text) != pf.group {
			continue
		}

		options, err := group.Elements("div.tags")
		if err != nil {
			return nil, fmt.Errorf("读取「%s」的选项失败: %w", pf.group, err)
		}

View on GitHub (pinned to 332d196854)

Solutions

  1. 确认搜索页已完全加载(等待 div.filter-panel 出现)后再调用 Search
  2. 升级库版本以获取最新选择器适配
  3. 检查是否被重定向到登录/验证码页,先完成登录
  4. 手动打开搜索页核对 div.filter-panel div.filters 是否仍存在,必要时报告/修正选择器

Example fix

// before
q := xiaohongshu.SearchQuery{Keyword: "旅行", Filter: "图文"}
res, err := client.Search(ctx, q)
// after
err = rod.Try(func() { page.Wait("div.filter-panel") }) // 确保面板已渲染
res, err := client.Search(ctx, q)
Defensive patterns

Strategy: try-catch

Try / catch

res, err := client.Search(ctx, q)
if err != nil {
    if strings.Contains(err.Error(), "读取筛选面板失败") {
        // 页面结构/加载问题:等待后重试或升级库
        return retryAfterDelay(q, 2*time.Second)
    }
    return err
}

Prevention

When it happens

Trigger: 调用 Search 且携带筛选参数时,page.Elements("div.filter-panel div.filters") 返回错误——通常是页面 DOM 未渲染出筛选面板、rod 超时、或页面结构变更导致选择器失效。

Common situations: 小红书改版导致 div.filter-panel/div.filters 类名变化;页面尚未加载完成就查询;网络差使搜索结果页渲染慢;被风控/验证码页替换了正常结果页。

Related errors


AI-assisted analysis of xpzouying/xiaohongshu-mcp@332d196854 (2026-09-05). Data as JSON: /api/errors/3878d3bf5d04043a. Report an issue: GitHub.