209 lines
4.8 KiB
Markdown
209 lines
4.8 KiB
Markdown
# 小红书登录状态调试指南
|
||
|
||
## 问题现象
|
||
登录验证失败,提示"未找到登录状态,请先登录"
|
||
|
||
## 调试步骤
|
||
|
||
### 1. 检查服务是否正常启动
|
||
```bash
|
||
# 启动服务
|
||
python main.py
|
||
|
||
# 在另一个终端访问调试接口
|
||
curl http://localhost:18085/api/debug/browser
|
||
```
|
||
|
||
**预期输出:**
|
||
```json
|
||
{
|
||
"browser_exists": true,
|
||
"contexts_count": 0,
|
||
"contexts": [],
|
||
"data_dir": "data",
|
||
"auth_file_exists": false,
|
||
"storage_file_exists": false
|
||
}
|
||
```
|
||
|
||
### 2. 检查浏览器状态
|
||
查看控制台输出,应该看到:
|
||
```
|
||
[INFO] 浏览器初始化完成
|
||
[DEBUG] === 检查浏览器状态 ===
|
||
[DEBUG] 浏览器实例存在: true
|
||
```
|
||
|
||
### 3. 打开登录页面
|
||
1. 访问:http://localhost:18085
|
||
2. 点击"打开登录页"按钮
|
||
3. 在新窗口中扫码登录小红书
|
||
4. 登录成功后不要关闭窗口
|
||
|
||
### 4. 测试登录验证
|
||
返回页面,点击"验证登录"按钮,查看控制台输出。
|
||
|
||
**预期成功输出:**
|
||
```
|
||
[DEBUG] 开始验证登录状态...
|
||
[DEBUG] 尝试保存 storage_state 到: data/storage_state.json
|
||
[DEBUG] ✓ 成功保存 storage_state
|
||
[DEBUG] storage_state 文件大小: 2456 bytes
|
||
[DEBUG] 使用 storage_state 验证登录...
|
||
[DEBUG] ✓ 登录验证成功
|
||
```
|
||
|
||
### 5. 手动验证API
|
||
使用curl测试各个接口:
|
||
```bash
|
||
# 检查登录状态
|
||
curl http://localhost:18085/api/check-login-status
|
||
|
||
# 验证登录
|
||
curl -X POST http://localhost:18085/api/login/verify
|
||
|
||
# 查看调试信息
|
||
curl http://localhost:18085/api/debug/browser
|
||
```
|
||
|
||
## 常见问题及解决方案
|
||
|
||
### 问题1:浏览器初始化失败
|
||
**现象:** `browser_exists: false`
|
||
|
||
**原因:** Playwright浏览器未安装
|
||
**解决:**
|
||
```bash
|
||
playwright install chromium
|
||
```
|
||
|
||
### 问题2:Context不存在
|
||
**现象:** `contexts_count: 0`
|
||
|
||
**原因:** 浏览器Context未创建
|
||
**解决:** 重启服务,确保浏览器在应用启动时初始化
|
||
|
||
### 问题3:保存storage_state失败
|
||
**现象:** 保存storage_state时异常
|
||
|
||
**原因:** 权限问题或目录不存在
|
||
**解决:**
|
||
```bash
|
||
mkdir -p data
|
||
chmod 755 data
|
||
```
|
||
|
||
### 问题4:验证失败但已登录
|
||
**现象:** 已经扫码登录,但验证失败
|
||
|
||
**原因:**
|
||
1. 页面加载不完整
|
||
2. 风控拦截
|
||
3. Cookie变化
|
||
|
||
**解决:**
|
||
1. 等待页面完全加载后再验证
|
||
2. 尝试重新登录
|
||
3. 检查控制台详细错误信息
|
||
|
||
## 详细调试流程
|
||
|
||
### 1. 完整日志查看
|
||
```bash
|
||
# 启动服务时显示详细日志
|
||
python main.py # 查看所有输出
|
||
|
||
# 或使用日志级别
|
||
uvicorn app.web:app --log-level debug
|
||
```
|
||
|
||
### 2. 文件检查
|
||
检查以下文件是否存在:
|
||
- `data/storage_state.json` - 浏览器状态文件
|
||
- `data/auth_state.json` - 认证状态文件
|
||
- `data/logs.json` - 操作日志
|
||
|
||
### 3. 手动测试storage_state
|
||
```python
|
||
# 手动测试storage_state保存
|
||
from playwright.async_api import async_playwright
|
||
|
||
async def test_storage():
|
||
async with async_playwright() as p:
|
||
browser = await p.chromium.launch()
|
||
context = await browser.new_context()
|
||
page = await context.new_page()
|
||
|
||
# 访问小红书
|
||
await page.goto("https://www.xiaohongshu.com")
|
||
await asyncio.sleep(2)
|
||
|
||
# 保存storage_state
|
||
await context.storage_state(path="test_storage.json")
|
||
await browser.close()
|
||
|
||
# 运行测试
|
||
asyncio.run(test_storage())
|
||
```
|
||
|
||
### 4. Cookie分析
|
||
如果保存了storage_state文件,可以查看其中的cookies部分:
|
||
```json
|
||
{
|
||
"cookies": [
|
||
{
|
||
"name": "a1",
|
||
"value": "...",
|
||
"domain": ".xiaohongshu.com",
|
||
"path": "/",
|
||
"expires": -1,
|
||
"httpOnly": false,
|
||
"secure": true,
|
||
"sameSite": "Lax"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
## 进阶调试
|
||
|
||
### 1. 使用浏览器开发者工具
|
||
1. 在登录页面打开开发者工具(F12)
|
||
2. 切换到Application/Storage标签
|
||
3. 查看Cookies和Local Storage
|
||
4. 确认登录相关的cookie是否存在
|
||
|
||
### 2. 网络请求分析
|
||
1. 在开发者工具的Network标签中
|
||
2. 查看对`xiaohongshu.com`的请求
|
||
3. 确认请求头中是否包含正确的Cookie
|
||
|
||
### 3. 手动验证登录状态
|
||
```javascript
|
||
// 在浏览器控制台运行
|
||
// 检查是否有登录相关的cookie
|
||
document.cookie.split(';').forEach(cookie => {
|
||
const [name, value] = cookie.trim().split('=');
|
||
if (name.includes('session') || name.includes('token') || name.includes('auth')) {
|
||
console.log(`${name}: ${value}`);
|
||
}
|
||
});
|
||
|
||
// 检查localStorage
|
||
console.log('localStorage:', Object.keys(localStorage));
|
||
|
||
// 检查是否被重定向到登录页
|
||
if (window.location.pathname.includes('login')) {
|
||
console.log('被重定向到登录页');
|
||
}
|
||
```
|
||
|
||
## 联系技术支持
|
||
如果以上步骤都无法解决问题,请提供以下信息:
|
||
1. 完整的控制台输出
|
||
2. 三个文件的内容(如果存在):
|
||
- `data/storage_state.json`
|
||
- `data/auth_state.json`
|
||
- `data/logs.json`
|
||
3. 浏览器类型和版本
|
||
4. 操作系统信息 |