{"record":{"id":"0c2d82ade94afdf2","repo":"xpzouying/xiaohongshu-mcp","slug":"s","errorCode":null,"errorMessage":"解压后未找到二进制 %s","messagePattern":"解压后未找到二进制 (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"browser/browser_download.go","lineNumber":122,"sourceCode":"\t\treturn \"\", fmt.Errorf(\"下载内置浏览器失败: %w\\n\"+\n\t\t\t\"  本项目只用内置浏览器，缺它不继续。请检查网络后重试；\\n\"+\n\t\t\t\"  离线环境可手动下载 %s，解压到 %s 后重启。\", dlErr, browserURL(asset), cacheDir)\n\t}\n\tdefer os.Remove(archivePath)\n\n\t// 校验 SHA256（本地已成分发点，必须校验完整性）\n\tif err := verifySHA256(archivePath, asset); err != nil {\n\t\treturn \"\", fmt.Errorf(\"校验失败: %w\", err)\n\t}\n\n\tlogrus.Infof(\"解压内置浏览器 ...\")\n\tif err := extractArchive(archivePath, cacheDir); err != nil {\n\t\treturn \"\", fmt.Errorf(\"解压失败: %w\", err)\n\t}\n\n\tbin := findBinary(cacheDir, binName)\n\tif bin == \"\" {\n\t\treturn \"\", fmt.Errorf(\"解压后未找到二进制 %s\", binName)\n\t}\n\tlogrus.Infof(\"内置浏览器就绪: %s\", bin)\n\treturn bin, nil\n}\n\n// verifySHA256 下载同目录的 SHA256SUMS，校验 asset 的哈希。\nfunc verifySHA256(archivePath, asset string) error {\n\twant, err := fetchExpectedSHA(asset)\n\tif err != nil {\n\t\treturn err\n\t}\n\tf, err := os.Open(archivePath)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer f.Close()\n\th := sha256.New()\n\tif _, err := io.Copy(h, f); err != nil {","sourceCodeStart":104,"sourceCodeEnd":140,"githubUrl":"https://github.com/xpzouying/xiaohongshu-mcp/blob/332d196854a9eac0d2b8c2c0e3d0cc43139d724c/browser/browser_download.go#L104-L140","documentation":"EnsureBrowser 解压成功后在缓存目录中 findBinary 找不到预期名称的二进制文件（binName）：压缩包内容结构与预期不符，或解压产物路径与查找规则不匹配，属打包/版本错位问题。","triggerScenarios":"extractArchive 解压出的目录结构与 findBinary 搜索逻辑不匹配：资产版本更新后内部路径变化、解压多套一层目录、二进制文件名变更（如 chrome → chrome-headless-shell）。","commonSituations":"上游浏览器版本升级改变了压缩包内部结构；手动放置文件时目录层级不对；解压未保留可执行位导致 findBinary 判断失败。","solutions":["解压后手动检查缓存目录结构，确认二进制实际名称与位置","更新 findBinary 的搜索逻辑以匹配新布局","清空缓存目录重新下载，排除旧版本残留干扰"],"exampleFix":"// before\nreturn \"\", fmt.Errorf(\"解压后未找到二进制 %s\", binName)\n// after\nreturn \"\", fmt.Errorf(\"解压后未找到二进制 %s (cache: %s)\", binName, cacheDir)","handlingStrategy":"validation","validationCode":"// 升级浏览器资产后先本地解压验证产物\n// tar -tf linux-x64.tar.xz | grep -E 'chrome$' 确认二进制路径","typeGuard":null,"tryCatchPattern":null,"preventionTips":["上游浏览器版本升级后核对压缩包内部目录结构","保持 findBinary 的搜索逻辑与资产布局同步","缓存目录中只保留同一版本的产物，避免旧残留干扰","确保解压保留可执行权限（tar -p / chmod +x）"],"tags":["extraction","binary-layout","browser"],"backgroundTag":"binary-not-found-after-extract","analyzedSha":"332d196854a9eac0d2b8c2c0e3d0cc43139d724c","analyzedAt":"2026-09-05T22:22:55.988Z","contentChangedAt":"2026-09-05T22:22:55.988Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}