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

4.8 KiB
Raw Blame History

小红书登录状态调试指南

问题现象

登录验证失败,提示"未找到登录状态,请先登录"

调试步骤

1. 检查服务是否正常启动

# 启动服务
python main.py

# 在另一个终端访问调试接口
curl http://localhost:18085/api/debug/browser

预期输出:

{
  "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测试各个接口:

# 检查登录状态
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浏览器未安装 解决:

playwright install chromium

问题2:Context不存在

现象: contexts_count: 0

原因: 浏览器Context未创建 解决: 重启服务,确保浏览器在应用启动时初始化

问题3:保存storage_state失败

现象: 保存storage_state时异常

原因: 权限问题或目录不存在 解决:

mkdir -p data
chmod 755 data

问题4:验证失败但已登录

现象: 已经扫码登录,但验证失败

原因:

  1. 页面加载不完整
  2. 风控拦截
  3. Cookie变化

解决:

  1. 等待页面完全加载后再验证
  2. 尝试重新登录
  3. 检查控制台详细错误信息

详细调试流程

1. 完整日志查看

# 启动服务时显示详细日志
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

# 手动测试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部分:

{
  "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. 手动验证登录状态

// 在浏览器控制台运行
// 检查是否有登录相关的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. 操作系统信息