# 位置自动匹配功能说明 ## 功能概述 当启用代理发布时,系统会自动使用代理所在地区作为发布位置,避免账号地区与发布位置不一致触发风控。 ## 实现方式 ### 1. 自动提取代理地区 ```python # 在 app.py 中 if proxy_payload.get('enabled'): proxy_city = proxy_payload.get('city', '').strip() if proxy_city: location = proxy_city # 自动设置为代理地区 ``` ### 2. 传递给发布器 ```python params = PublishParams( title=title, video_path=video_path, location=location # 使用代理地区 ) ``` ### 3. 设置位置(微信视频号) ```python # 在 weixin.py 的 add_title_tags 方法中 if params.location: await self.set_location(params.location) ``` ## 使用方法 ### 方式 1: 自动从代理配置提取(推荐) ```json POST /publish/ai-assisted { "platform": "weixin", "proxy": { "enabled": true, "provider": "shenlong", "productKey": "xxx", "signature": "xxx", "regionCode": "310000", "city": "上海" // ← 自动使用这个 } } ``` **系统会自动:** 1. 提取 `city` 字段 2. 设置为发布位置 3. 避免地区不一致 ### 方式 2: 手动指定位置 ```json { "platform": "weixin", "location": "北京", // ← 手动指定 "proxy": { "enabled": true, ... } } ``` ## 优先级 1. **手动指定的 location** > **代理配置的 city** > **默认值(重庆市)** ## 注意事项 ### 微信视频号位置设置 微信视频号发布页面的位置选择 UI 可能因版本/账号而异。当前实现了以下查找策略: 1. 查找位置输入框: - `input[placeholder*="位置"]` - `input[placeholder*="所在"]` - `input[placeholder*="地点"]` 2. 查找位置按钮: - `div:has-text("所在位置")` - `div:has-text("添加位置")` 3. 输入并选择: - 填充位置名称 - 等待建议出现 - 选择匹配项 ### 如果位置未生效 1. **检查代理配置**: ```json { "proxy": { "city": "上海" // 确保这个字段存在 } } ``` 2. **查看日志**: ``` [weixin] 准备设置位置: 上海 [weixin] 正在设置位置: 上海 [weixin] 找到位置元素: xxx [weixin] ✓ 位置设置成功: 上海 ``` 3. **手动指定位置**: ```json { "location": "上海" // 手动指定 } ``` ## 调试建议 ### 查看完整日志 ```bash # 启动服务时禁用缓冲 PYTHONUNBUFFERED=1 python app.py --headless false ``` ### 检查截图 发布完成后的截图会显示最终的位置设置状态。 ### 有头模式观察 ```json { "headless": false // 显示浏览器窗口 } ``` 在浏览器窗口中观察位置设置过程。 ## 已知问题 ### 1. 微信视频号位置UI变化 如果微信更新了发布页面UI,位置选择器可能失效。 **解决方法**:更新 `weixin.py` 中的 `set_location` 方法的选择器列表。 ### 2. 位置建议不匹配 如果输入的位置没有精确匹配的建议项,系统会尝试选择第一个建议。 **解决方法**:使用标准城市名称(如"上海"而非"上海市")。 ## 测试验证 ### 测试脚本 ```javascript const response = await fetch('http://localhost:5005/publish/ai-assisted', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({ platform: 'weixin', proxy: { enabled: true, city: '上海' // 测试自动匹配 } }) }); ``` ### 预期结果 ``` ✅ 使用代理地区作为发布位置: 上海 ✅ 准备设置位置: 上海 ✅ 正在设置位置: 上海 ✅ 找到位置元素 ✅ 位置设置成功: 上海 ``` ## 其他平台 不同平台的位置设置方式不同: - **抖音**: 需要单独实现 - **小红书**: 需要单独实现 - **快手**: 需要单独实现 如需支持其他平台,请在对应的 `platforms/xxx.py` 中实现 `set_location` 方法。