# 小红书登录状态调试指南 ## 问题现象 登录验证失败,提示"未找到登录状态,请先登录" ## 调试步骤 ### 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. 操作系统信息