131 lines
3.9 KiB
Markdown
131 lines
3.9 KiB
Markdown
|
|
# 小红书上传器改进总结
|
|||
|
|
|
|||
|
|
## 问题背景
|
|||
|
|
|
|||
|
|
用户在使用小红书上传器时遇到两个主要问题:
|
|||
|
|
1. **无头模式下找不到上传元素** - 导致文件上传失败
|
|||
|
|
2. **有头模式下突然跳转到登录页面** - 说明反自动化检测被触发
|
|||
|
|
|
|||
|
|
## 解决方案概述
|
|||
|
|
|
|||
|
|
### 1. 登录状态检测与处理
|
|||
|
|
|
|||
|
|
#### 新增功能
|
|||
|
|
- **`check_and_handle_login_status()`** - 智能检测登录状态
|
|||
|
|
- **`handle_login_redirect()`** - 处理登录重定向问题
|
|||
|
|
|
|||
|
|
#### 检测逻辑
|
|||
|
|
```python
|
|||
|
|
# 检测登录状态指示器
|
|||
|
|
login_indicators = [
|
|||
|
|
# 已登录元素
|
|||
|
|
'.user-info', '.avatar', '.username',
|
|||
|
|
'[class*="user"]', '[class*="avatar"]',
|
|||
|
|
'button[class*="publish"]', 'a[href*="creator"]',
|
|||
|
|
# 未登录元素
|
|||
|
|
'button[class*="login"]', 'a[href*="login"]',
|
|||
|
|
'.login-btn', '.signin'
|
|||
|
|
]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 处理策略
|
|||
|
|
1. 先访问主页建立会话
|
|||
|
|
2. 检查登录状态
|
|||
|
|
3. 导航到创作者页面
|
|||
|
|
4. 二次检查是否被重定向
|
|||
|
|
5. 提供详细的错误诊断和解决建议
|
|||
|
|
|
|||
|
|
### 2. 改进的文件上传处理
|
|||
|
|
|
|||
|
|
#### 新增功能
|
|||
|
|
- **`handle_file_upload_xiaohongshu()`** - 多策略文件上传
|
|||
|
|
- **`debug_xiaohongshu_page()`** - 页面状态调试
|
|||
|
|
|
|||
|
|
#### 上传策略
|
|||
|
|
```python
|
|||
|
|
upload_selectors = [
|
|||
|
|
"div[class^='upload-content'] input[class='upload-input']", # 原始选择器
|
|||
|
|
'input.upload-input', # 通用选择器
|
|||
|
|
'input[type="file"]', # 文件输入通用
|
|||
|
|
'input[accept*="video"]', # 视频文件输入
|
|||
|
|
'input[accept*="mp4"]', # MP4文件输入
|
|||
|
|
'.upload-input', # CSS类选择器
|
|||
|
|
'[class*="upload-input"]', # 包含upload-input的类
|
|||
|
|
'input[accept*="*"]' # 通用文件输入
|
|||
|
|
]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 特性
|
|||
|
|
- **多重选择器策略** - 按优先级尝试不同的元素选择器
|
|||
|
|
- **元素状态验证** - 检查元素是否可用和已附加
|
|||
|
|
- **重试机制** - 最多3次上传尝试
|
|||
|
|
- **详细日志** - 记录每个步骤的状态
|
|||
|
|
|
|||
|
|
### 3. 增强的反检测能力
|
|||
|
|
|
|||
|
|
#### 集成统一工具
|
|||
|
|
- 使用 `utils.anti_detection` 模块
|
|||
|
|
- **`create_stealth_browser()`** - 创建隐蔽浏览器
|
|||
|
|
- **`create_stealth_context()`** - 创建隐蔽上下文
|
|||
|
|
- **`setup_stealth_page()`** - 设置隐蔽页面
|
|||
|
|
|
|||
|
|
#### 小红书特定配置
|
|||
|
|
```python
|
|||
|
|
# 为小红书设置合适的视口大小
|
|||
|
|
custom_options = {'viewport': {"width": 1600, "height": 900}}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. 调试和诊断工具
|
|||
|
|
|
|||
|
|
#### 调试功能
|
|||
|
|
- **页面状态检查** - URL、标题、HTML长度
|
|||
|
|
- **错误信息检测** - 自动查找错误提示
|
|||
|
|
- **截图保存** - 保存调试截图
|
|||
|
|
- **详细日志** - 记录所有关键操作
|
|||
|
|
|
|||
|
|
## 使用建议
|
|||
|
|
|
|||
|
|
### 1. 处理登录问题
|
|||
|
|
如果遇到登录重定向,请:
|
|||
|
|
1. 检查 `cookies/xiaohongshu_uploader/account.json` 文件是否存在且有效
|
|||
|
|
2. 重新获取小红书 cookie(运行获取cookie脚本)
|
|||
|
|
3. 尝试使用有头模式:`headless=False`
|
|||
|
|
4. 清除浏览器缓存后重新登录
|
|||
|
|
|
|||
|
|
### 2. 模式选择
|
|||
|
|
- **开发和调试阶段**:建议使用 `headless=False`
|
|||
|
|
- **生产环境**:可以尝试 `headless=True`,但要准备回退方案
|
|||
|
|
- **首次运行**:建议使用 `headless=False` 确保Cookie有效
|
|||
|
|
|
|||
|
|
### 3. 错误处理
|
|||
|
|
- 检查上传器日志输出
|
|||
|
|
- 查看生成的调试截图
|
|||
|
|
- 根据错误信息采取相应措施
|
|||
|
|
|
|||
|
|
## 测试方法
|
|||
|
|
|
|||
|
|
运行测试脚本验证改进效果:
|
|||
|
|
```bash
|
|||
|
|
python examples/test_xiaohongshu_login_check.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
测试包括:
|
|||
|
|
1. 登录状态检测和重定向处理
|
|||
|
|
2. 无头模式反检测能力
|
|||
|
|
3. 文件上传元素查找能力
|
|||
|
|
|
|||
|
|
## 优势
|
|||
|
|
|
|||
|
|
1. **更强的鲁棒性** - 能够处理各种异常情况
|
|||
|
|
2. **更好的反检测** - 集成了最新的反检测技术
|
|||
|
|
3. **详细的诊断** - 提供全面的错误信息和解决建议
|
|||
|
|
4. **灵活的策略** - 支持多种元素定位和上传策略
|
|||
|
|
5. **便于调试** - 丰富的日志和调试工具
|
|||
|
|
|
|||
|
|
## 注意事项
|
|||
|
|
|
|||
|
|
- 小红书的反自动化检测较为严格,建议优先使用有头模式
|
|||
|
|
- Cookie有效性是成功上传的关键因素
|
|||
|
|
- 网络环境和页面加载速度可能影响上传成功率
|
|||
|
|
- 定期更新反检测策略以适应平台变化
|