{"record":{"id":"52329565b178e565","repo":"xpzouying/xiaohongshu-mcp","slug":"error-523295","errorCode":null,"errorMessage":"导航到发布页面失败","messagePattern":"导航到发布页面失败","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"xiaohongshu/publish_video.go","lineNumber":31,"sourceCode":")\n\n// PublishVideoContent 发布视频内容\ntype PublishVideoContent struct {\n\tTitle        string\n\tContent      string\n\tTags         []string\n\tVideoPath    string\n\tScheduleTime *time.Time // 定时发布时间，nil 表示立即发布\n\tVisibility   string     // 可见范围: \"公开可见\"(默认), \"仅自己可见\", \"仅互关好友可见\"\n\tProducts     []string   // 商品关键词列表，用于绑定带货商品\n}\n\n// NewPublishVideoAction 进入发布页并切换到\"上传视频\"\nfunc NewPublishVideoAction(page *rod.Page) (*PublishAction, error) {\n\tpp := page.Timeout(300 * time.Second)\n\n\tif err := pp.Navigate(urlOfPublic); err != nil {\n\t\treturn nil, errors.Wrap(err, \"导航到发布页面失败\")\n\t}\n\n\t// 使用 WaitLoad 代替 WaitIdle（更宽松）\n\tif err := pp.WaitLoad(); err != nil {\n\t\tlogrus.Warnf(\"等待页面加载出现问题: %v，继续尝试\", err)\n\t}\n\ttime.Sleep(2 * time.Second)\n\n\tif err := pp.WaitDOMStable(time.Second, 0.1); err != nil {\n\t\tlogrus.Warnf(\"等待 DOM 稳定出现问题: %v，继续尝试\", err)\n\t}\n\ttime.Sleep(1 * time.Second)\n\n\tif err := mustClickPublishTab(pp, \"上传视频\"); err != nil {\n\t\treturn nil, errors.Wrap(err, \"切换到上传视频失败\")\n\t}\n\n\ttime.Sleep(1 * time.Second)","sourceCodeStart":13,"sourceCodeEnd":49,"githubUrl":"https://github.com/xpzouying/xiaohongshu-mcp/blob/332d196854a9eac0d2b8c2c0e3d0cc43139d724c/xiaohongshu/publish_video.go#L13-L49","documentation":"NewPublishVideoAction 导航到小红书发布页（urlOfPublic）时 Navigate 失败：网络问题、登录态失效被重定向或浏览器上下文已关闭，导致进不了发布页。","triggerScenarios":"pp.Navigate(urlOfPublic) 返回错误：网络不通/DNS 解析失败；创作平台域名返回异常；浏览器实例已关闭或 CDP 连接断开；页面正处于会导致导航中止的状态；300s 超时到期。","commonSituations":"无头浏览器未登录被重定向到登录页后导航异常；代理/VPN 环境下无法访问 creator.xiaohongshu.com；浏览器进程被 OOM killer 杀掉；网络抖动或防火墙拦截。","solutions":["检查网络连通性（curl https://creator.xiaohongshu.com）和代理配置","确认 browser/page 实例仍存活，必要时重建浏览器并重新登录","重试 NewPublishVideoAction，网络抖动通常重试可恢复","检查 urlOfPublic 常量是否因平台改版而失效"],"exampleFix":"// before\nif err := pp.Navigate(urlOfPublic); err != nil {\n    return nil, errors.Wrap(err, \"导航到发布页面失败\")\n}\n// after\nif err := pp.Navigate(urlOfPublic); err != nil {\n    return nil, errors.Wrapf(err, \"导航到发布页面失败: %s\", urlOfPublic) // 带上URL便于排查\n}\n// 调用侧重试\nvar action *PublishAction\nvar err error\nfor i := 0; i < 3; i++ {\n    if action, err = NewPublishVideoAction(page); err == nil {\n        break\n    }\n    time.Sleep(2 * time.Second)\n}","handlingStrategy":"retry","validationCode":"// 调用前检查网络与浏览器存活\nif _, err := http.Get(\"https://creator.xiaohongshu.com\"); err != nil {\n    return fmt.Errorf(\"无法访问创作平台: %w\", err)\n}\nif page == nil || page.MustInfo().URL == \"\" && !isAlive(page) {\n    return errors.New(\"浏览器页面不可用\")\n}","typeGuard":null,"tryCatchPattern":"action, err := NewPublishVideoAction(page)\nif err != nil {\n    var netErr net.Error\n    if errors.As(err, &netErr) {\n        // 网络类错误：等待后重试\n        time.Sleep(5 * time.Second)\n        action, err = NewPublishVideoAction(page)\n    }\n    if err != nil {\n        return fmt.Errorf(\"进入视频发布页失败: %w\", err)\n    }\n}","preventionTips":["发布前先探测创作平台可达性","维护浏览器健康检查，页面失效则重建并重登录","导航类操作统一套有限次重试","将 urlOfPublic 配置化，平台改版时无需改代码"],"tags":["navigation","network","go-rod","browser"],"backgroundTag":"page-navigation-failed","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"}