Files
xhs_crawler_claude/login_debug_guide.md
T
2026-01-12 18:19:24 +08:00

209 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 小红书登录状态调试指南
## 问题现象
登录验证失败,提示"未找到登录状态,请先登录"
## 调试步骤
### 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. 操作系统信息