{"record":{"id":"f98698e6ba42c7c5","repo":"xpzouying/xiaohongshu-mcp","slug":"s-w-f98698","errorCode":null,"errorMessage":"读取「%s」的选项失败: %w","messagePattern":"读取「(.+?)」的选项失败: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"xiaohongshu/search.go","lineNumber":229,"sourceCode":"\tgroups, err := page.Elements(\"div.filter-panel div.filters\")\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"读取筛选面板失败: %w\", err)\n\t}\n\n\tfor _, group := range groups {\n\t\t// 组标签是 div.filters 下的直接子 span\n\t\tlabel, err := group.Element(\":scope > span\")\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\ttext, err := label.Text()\n\t\tif err != nil || strings.TrimSpace(text) != pf.group {\n\t\t\tcontinue\n\t\t}\n\n\t\toptions, err := group.Elements(\"div.tags\")\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"读取「%s」的选项失败: %w\", pf.group, err)\n\t\t}\n\n\t\tvar available []string\n\t\tfor _, opt := range options {\n\t\t\tt, err := opt.Text()\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tt = strings.TrimSpace(t)\n\t\t\tif t == pf.option {\n\t\t\t\treturn opt, nil\n\t\t\t}\n\t\t\tavailable = append(available, t)\n\t\t}\n\t\treturn nil, fmt.Errorf(\"「%s」里没有选项「%s」，页面上是：%s\",\n\t\t\tpf.group, pf.option, strings.Join(available, \"、\"))\n\t}\n","sourceCodeStart":211,"sourceCodeEnd":247,"githubUrl":"https://github.com/xpzouying/xiaohongshu-mcp/blob/332d196854a9eac0d2b8c2c0e3d0cc43139d724c/xiaohongshu/search.go#L211-L247","documentation":"findFilterOption 已找到目标分组（组标签文本匹配 pf.group），但读取组内 div.tags 选项元素列表失败：面板局部重渲染或 CDP 查询瞬时失败。","triggerScenarios":"Search 带筛选参数时，某个已匹配组标签（如「排序」）下 group.Elements(\"div.tags\") 查询出错——组内 DOM 结构变化、面板部分渲染、rod 查询超时。","commonSituations":"小红书前端改版把 div.tags 换成别的容器；筛选面板半开状态（部分组未展开渲染）；页面加载中途被脚本重绘。","solutions":["确认筛选面板完全展开后再触发 Search","升级到适配最新页面结构的库版本","用浏览器 DevTools 核对该分组下的选项容器标签是否仍是 div.tags","若仅偶发，加入重试逻辑"],"exampleFix":"// before\nres, err := client.Search(ctx, q) // 偶发读取选项失败\n// after\nfor i := 0; i < 3; i++ {\n    res, err = client.Search(ctx, q)\n    if err == nil || !strings.Contains(err.Error(), \"读取\") { break }\n    time.Sleep(time.Second)\n}","handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"res, err := client.Search(ctx, q)\nif err != nil && strings.Contains(err.Error(), \"的选项失败\") {\n    time.Sleep(time.Second)\n    res, err = client.Search(ctx, q) // 偶发渲染问题重试\n}","preventionTips":["偶发 DOM 查询错误优先重试而非报错终止","升级库版本适配页面改版","确认筛选面板已完全渲染","用 DevTools 核对 div.tags 结构是否仍成立"],"tags":["dom","selector","scraping","go-rod"],"backgroundTag":"dom-selector-not-found","analyzedSha":"332d196854a9eac0d2b8c2c0e3d0cc43139d724c","analyzedAt":"2026-09-05T22:22:55.988Z","contentChangedAt":"2026-09-05T22:22:55.988Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}