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
- 确认搜索页已完全加载(等待 div.filter-panel 出现)后再调用 Search
- 升级库版本以获取最新选择器适配
- 检查是否被重定向到登录/验证码页,先完成登录
- 手动打开搜索页核对 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
- 升级库版本保持选择器与最新页面结构同步
- 确保调用时已登录且能正常打开搜索结果页
- 对偶发 DOM 错误做有限次重试
- 捕获错误信息中「读取筛选面板失败」前缀做分类处理
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.