xpzouying/xiaohongshu-mcp · error

「%s」里没有选项「%s」,页面上是:%s

Error message

「%s」里没有选项「%s」,页面上是:%s

What it means

findFilterOption 在目标分组内遍历所有 div.tags 选项文本,没有与 pf.option 精确匹配的项:筛选值非法或与页面文案不一致,错误中列出页面上实际可选项(顿号分隔)供纠正输入。

Source

Thrown at xiaohongshu/search.go:244

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

		var available []string
		for _, opt := range options {
			t, err := opt.Text()
			if err != nil {
				continue
			}
			t = strings.TrimSpace(t)
			if t == pf.option {
				return opt, nil
			}
			available = append(available, t)
		}
		return nil, fmt.Errorf("「%s」里没有选项「%s」,页面上是:%s",
			pf.group, pf.option, strings.Join(available, "、"))
	}

	return nil, fmt.Errorf("筛选面板里没有「%s」这一组", pf.group)
}

func makeSearchURL(keyword string) string {

	values := url.Values{}
	values.Set("keyword", keyword)
	values.Set("source", "web_explore_feed")

	//https://www.xiaohongshu.com/search_result?keyword=%25E7%258E%258B%25E5%25AD%2590&source=web_search_result_notes
	//https://www.xiaohongshu.com/search_result?keyword=%25E7%258E%258B%25E5%25AD%2590&source=web_explore_feed
	return fmt.Sprintf("https://www.xiaohongshu.com/search_result?%s", values.Encode())
}

View on GitHub (pinned to 332d196854)

Solutions

  1. 按错误信息中「页面上是:」列出的实际选项修正传入的 option 字符串
  2. 升级库版本获取最新的筛选枚举值
  3. 避免硬编码选项文本,使用库提供的常量/枚举(如有)

Example fix

// before
pf := pendingFilter{group: "排序", option: "按时间排序"}
// after(错误信息提示页面是:综合、最新、最热)
pf := pendingFilter{group: "排序", option: "最新"}
Defensive patterns

Strategy: validation

Validate before calling

var validOptions = map[string][]string{
  "排序": {"综合", "最新", "最热"},
  "筛选": {"图文", "视频"},
}
if !contains(validOptions[pf.Group], pf.Option) {
  return fmt.Errorf("选项 %q 不在组 %q 的已知列表中", pf.Option, pf.Group)
}

Type guard

func isValidFilterOption(group, option string) bool {
  for _, g := range knownGroups() {
    if g.name == group && contains(g.options, option) { return true }
  }
  return false
}

Try / catch

res, err := client.Search(ctx, q)
if err != nil {
  var available string
  if i := strings.Index(err.Error(), "页面上是:"); i >= 0 {
    available = err.Error()[i+len("页面上是:"):]
  }
  return fmt.Errorf("筛选参数错误,可用选项: %s", available)
}

Prevention

When it happens

Trigger: Search 的 pendingFilter 配置中 option 字符串与页面上实际展示的选项文本不一致,例如传「视频号」而页面只有「视频」,或传英文/含空格文本。

Common situations: 小红书改版调整了选项文案(如「最新」改「最新笔记」);调用方硬编码了过期选项名;大小写/全半角差异;该筛选组在某些类目下不提供该选项。

Related errors


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