目录服务层功能完善图文发布功能实现视频发布功能实现MCP工具接口开发FastMCP集成工具接口设计与优化浏览器自动化核心功能浏览器管理器优化页面控制器实现本周开发总结服务层功能完善图文发布功能实现1. 开发过程图文发布功能是小红书MCP核心能力之一需兼顾本地/网络图片处理、发布流程闭环、参数合法性校验三大核心诉求具体实现如下图片处理逻辑设计针对本地图片和网络图片两种输入形式设计ImageProcessor类并实现process_images核心方法。其中网络图片下载模块支持HTTP/HTTPS协议新增图片格式验证逻辑仅放行JPG、PNG、GIF、WebP格式文件。发布流程实现封装_publish_content方法统一管理发布全流程标准化执行步骤启动浏览器 → 导航至发布页 → 图片上传 → 内容填写 → 发布触发 → 结果等待全流程嵌入错误捕获与状态反馈机制。参数验证逻辑严格约束发布内容参数标题长度限制1-20字、图片数量1-9张、内容支持文本表情混合格式前置校验避免平台端异常。2. 核心问题与解决方案问题1网络图片下载失败现象HTTPS链接图片下载成功率低偶发超时/无响应根因网络超时、目标服务器反爬、格式不兼容解决方案① 实现3次重试机制失败后间隔1秒重试② 模拟浏览器User-Agent请求头③ 统一转换图片为JPG格式核心代码asyncdefdownload_image(self,url,timeout30):下载网络图片支持重试forattemptinrange(3):try:headers{User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36}asyncwithaiohttp.ClientSession()assession:asyncwithsession.get(url,headersheaders,timeouttimeout)asresponse:ifresponse.status200:contentawaitresponse.read()returncontentexceptExceptionase:logger.warning(f下载图片失败 (尝试{attempt1}/3):{e})awaitasyncio.sleep(1)returnNone问题2图片上传超时现象多图上传时频繁触发超时发布流程中断根因图片体积过大、上传速度慢、固定等待时间不足解决方案① 图片压缩限制单张体积② 动态调整等待时间基础10秒每张图片5秒上限60秒③ 分批上传优化传输效率核心代码asyncdef_wait_for_upload_complete(self,image_count):等待图片上传完成根据图片数量调整等待时间wait_timemin(60,10image_count*5)start_timetime.time()whiletime.time()-start_timewait_time:ifawaitself._is_upload_complete():returnTrueawaitasyncio.sleep(2)returnFalse视频发布功能实现1. 开发过程视频发布模块聚焦格式兼容性、流程标准化、状态监控三大方向视频格式验证支持MP4/MOV/AVI格式校验文件存在性、可读性建议单文件不超过1GB发布流程实现_publish_video方法流程为启动浏览器 → 发布页导航 → 视频发布入口选择 → 视频上传 → 平台处理等待 → 内容填写 → 发布状态监控实时监控视频处理进度捕获转码失败场景输出结构化错误信息。2. 核心问题与解决方案问题1视频处理时间过长现象视频上传后平台处理超时发布流程终止根因视频体积大、平台队列拥堵、网络不稳定解决方案① 延长最大等待时间至10分钟② 每10秒轮询处理状态③ 超时后执行优雅降级策略核心代码asyncdef_wait_for_video_processing(self):等待视频处理完成max_wait_time600# 10分钟start_timetime.time()whiletime.time()-start_timemax_wait_time:statusawaitself._get_video_processing_status()ifstatuscompleted:returnTrueelifstatusfailed:returnFalseawaitasyncio.sleep(10)logger.warning(视频处理超时)returnFalse问题2视频格式不兼容现象部分MP4视频上传后无法转码发布失败根因编码格式不支持、分辨率/比特率过高解决方案① 检测视频编码仅支持h264/h265/mpeg4② 限制分辨率≤1920x1080③ 输出标准化兼容检测报告核心代码defcheck_video_compatibility(self,video_path):检查视频兼容性try:importffmpeg probeffmpeg.probe(video_path)video_streamnext((streamforstreaminprobe[streams]ifstream[codec_type]video),None)ifnotvideo_stream:returnFalse,未找到视频流codec_namevideo_stream[codec_name]ifcodec_namenotin[h264,h265,mpeg4]:returnFalse,f不支持的视频编码:{codec_name}widthint(video_stream[width])heightint(video_stream[height])ifwidth1920orheight1080:returnFalse,视频分辨率过高建议不超过1920x1080returnTrue,视频格式兼容exceptExceptionase:returnFalse,f检查视频格式时出错:{str(e)}MCP工具接口开发FastMCP集成1. 开发过程完成FastMCP框架的全量集成实现小红书能力的标准化工具封装服务初始化创建FastMCP实例配置服务名称/版本完成工具函数注册工具接口设计工具名称功能描述xiaohongshu_publish图文内容发布xiaohongshu_publish_video视频内容发布xiaohongshu_search小红书内容搜索xiaohongshu_get_user_info用户信息获取参数标准化定义统一参数格式实现入参校验输出完整接口文档。2. 核心问题与解决方案问题1工具注册失败现象注册时触发AttributeError工具无法加载根因FastMCP版本不兼容、装饰器使用错误、参数类型注解不规范解决方案① 升级至最新版FastMCP② 修正装饰器使用方式规范参数类型注解核心代码# 正确的工具注册方式mcp.toolasyncdefxiaohongshu_publish(title:str,content:str,images:List[str],tags:Optional[List[str]]None,username:Optional[str]None)-dict: 发布图文内容到小红书 # 业务逻辑实现问题2流式输出实现现象工具无进度反馈用户体验差根因缺少上下文对象、无进度报告机制、响应格式不规范解决方案① 集成Context上下文对象② 分阶段上报进度10%/30%/50%/70%/100%核心代码asyncdefxiaohongshu_publish(...,context:Optional[Context]None): 发布图文内容支持流式输出 ifcontext:awaitcontext.report_progress(progress10,total100,message开始发布)# 处理图片ifcontext:awaitcontext.report_progress(progress30,total100,message处理图片中)# 上传图片ifcontext:awaitcontext.report_progress(progress50,total100,message上传图片中)# 填写内容ifcontext:awaitcontext.report_progress(progress70,total100,message填写内容中)# 发布完成ifcontext:awaitcontext.report_progress(progress100,total100,message发布完成)浏览器自动化核心功能浏览器管理器优化1. 开发过程构建BrowserManager类实现浏览器全生命周期管理核心能力包括多浏览器支持兼容Chromium/Firefox/WebKit支持无头模式、用户数据目录配置反检测措施集成playwright-stealth插件实现浏览器指纹随机化、人类行为模拟随机延迟会话管理自动保存/加载Cookies支持会话恢复实现浏览器实例池调度。2. 核心问题与解决方案问题1浏览器被检测为自动化工具现象登录时触发滑块验证甚至账号封禁根因浏览器指纹特征明显、操作无随机延迟、缺失真实浏览器特性解决方案① 集成playwright-stealth插件模拟真实浏览器环境② 添加随机操作延迟③ 禁用自动化特征标识核心代码asyncdefstart(self):启动浏览器应用反检测措施self._playwrightawaitasync_playwright().start()ifself.browser_typechromium:browser_typeself._playwright.chromiumelifself.browser_typefirefox:browser_typeself._playwright.firefoxelse:browser_typeself._playwright.webkit self._browserawaitbrowser_type.launch(headlessself.headless,executable_pathself.executable_path,args[--disable-blink-featuresAutomationControlled,--user-agentMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36])self._contextawaitself._browser.new_context()awaitStealth(self._context)# 应用反检测插件self._pageawaitself._context.new_page()ifself.cookie_storage:awaitself.load_cookies()问题2浏览器启动失败现象Playwright无法定位浏览器可执行文件根因浏览器未安装、路径配置错误、权限不足解决方案① 自动检测系统内置浏览器Edge/Chrome② 提供默认路径兜底③ 输出精准错误提示核心代码def_find_browser_executable(self):自动查找浏览器可执行文件ifself.executable_pathandos.path.exists(self.executable_path):returnself.executable_pathifplatform.system()Windows:# 查找Edge浏览器edge_paths[rC:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe,rC:\Program Files\Microsoft\Edge\Application\msedge.exe]forpathinedge_paths:ifos.path.exists(path):returnpath# 查找Chrome浏览器chrome_paths[rC:\Program Files (x86)\Google\Chrome\Application\chrome.exe,rC:\Program Files\Google\Chrome\Application\chrome.exe]forpathinchrome_paths:ifos.path.exists(path):returnpathreturnNone页面控制器实现1. 开发过程实现页面操作标准化封装核心能力元素定位支持XPath/CSS选择器集成智能等待机制页面操作封装点击、输入、上传等操作支持导航/刷新异常处理捕获元素未找到、操作超时等异常输出结构化错误日志。2. 核心问题与解决方案问题1元素定位不稳定现象XPath选择器偶发失效操作失败根因页面动态渲染、XPath路径过深、元素加载延迟解决方案① 使用相对XPath路径② 实现元素智能等待最长30秒③ 多策略定位兜底核心代码asyncdefwait_for_element(self,selector,timeout30):等待元素出现try:awaitself.page.wait_for_selector(selector,timeouttimeout*1000)returnTrueexceptExceptionase:logger.warning(f等待元素{selector}失败:{e})returnFalseasyncdefclick_element(self,selector,timeout30):点击元素支持智能等待ifawaitself.wait_for_element(selector,timeout):try:awaitself.page.click(selector)returnTrueexceptExceptionase:logger.error(f点击元素{selector}失败:{e})returnFalsereturnFalse问题2文件上传失败现象图片/视频上传时文件选择对话框处理异常根因上传元素定位错误、路径格式不兼容、输入框隐藏解决方案① 精准定位文件输入元素② 兼容多系统路径格式③ 使用Playwright原生上传API核心代码asyncdefupload_file(self,selector,file_path):上传文件try:ifnotos.path.exists(file_path):raiseFileNotFoundError(f文件不存在:{file_path})input_elementawaitself.page.query_selector(selector)ifnotinput_element:raiseException(未找到文件输入元素)awaitinput_element.set_input_files(file_path)returnTrueexceptExceptionase:logger.error(f上传文件失败:{e})returnFalse本周开发总结本周完成小红书MCP服务三大核心模块开发服务层落地图文/视频发布全流程解决图片下载/上传超时、视频格式兼容等核心问题MCP接口完成FastMCP集成实现标准化工具注册与流式输出支撑上层调用浏览器自动化优化浏览器管理器与页面控制器攻克反检测、元素定位不稳定等关键问题。