This commit is contained in:
mzl
2026-01-12 18:19:24 +08:00
parent 950c61226d
commit fb98a5d221
4 changed files with 385 additions and 27 deletions
+61 -17
View File
@@ -104,6 +104,19 @@ async def get_status():
)
@app.get("/api/debug/browser")
async def debug_browser():
"""调试浏览器状态"""
return {
"browser_exists": app_state.browser is not None,
"contexts_count": len(app_state.browser.contexts) if app_state.browser else 0,
"contexts": [str(type(ctx)) for ctx in app_state.browser.contexts] if app_state.browser else [],
"data_dir": config.DATA_DIR,
"auth_file_exists": os.path.exists(os.path.join(config.DATA_DIR, "auth_state.json")),
"storage_file_exists": os.path.exists(os.path.join(config.DATA_DIR, "storage_state.json"))
}
@app.post("/api/start")
async def start_scraping(request: StartRequest):
"""启动采集"""
@@ -152,8 +165,8 @@ async def start_scraping(request: StartRequest):
# 创建事件队列
app_state.event_queue = asyncio.Queue()
# 创建采集器
app_state.scraper = XiaoHongShuScraper(app_state.event_queue, log_manager)
# 创建采集器(传入已初始化的浏览器实例)
app_state.scraper = XiaoHongShuScraper(app_state.event_queue, log_manager, app_state.browser)
# 启动采集任务
async def run_scraper():
@@ -461,16 +474,34 @@ async def generate_qrcode():
async def check_login_status():
"""检查小红书登录状态(直接验证)"""
try:
print("[DEBUG] === 检查浏览器状态 ===")
print(f"[DEBUG] 浏览器实例存在: {app_state.browser is not None}")
# 如果浏览器可用,直接使用浏览器验证
if app_state.browser:
print("[DEBUG] 浏览器可用,尝试获取context...")
if app_state.browser.contexts:
print(f"[DEBUG] 已有 {len(app_state.browser.contexts)} 个contexts")
context = app_state.browser.contexts[0]
print("[DEBUG] 使用现有context")
else:
print("[DEBUG] 创建新context")
context = await app_state.browser.new_context()
try:
page = await app_state.browser.new_page()
page = await context.new_page()
await page.goto("https://www.xiaohongshu.com/", timeout=10000)
await asyncio.sleep(2)
# 获取页面cookies
cookies = await page.context.cookies()
page.close()
cookies = await context.cookies()
print(f"[DEBUG] 找到 {len(cookies)} 个cookies")
# 打印所有cookies
for cookie in cookies:
cookie_name = cookie.get('name', '')
cookie_value = cookie.get('value', '')[:20] if cookie.get('value') else ''
print(f"[DEBUG] Cookie: {cookie_name} = {cookie_value}...")
# 检查是否有小红书相关的session cookie
session_cookies = []
@@ -478,7 +509,7 @@ async def check_login_status():
cookie_name = cookie.get('name', '').lower()
if any(keyword in cookie_name for keyword in ['session', 'token', 'login', 'auth']):
session_cookies.append(cookie)
print(f"[DEBUG] 找到session cookie: {cookie.get('name')} = {cookie.get('value', '')[:20]}...")
print(f"[DEBUG] ✓ 找到登录cookie: {cookie_name}")
if session_cookies:
return {
@@ -488,35 +519,48 @@ async def check_login_status():
"cookies_count": len(session_cookies)
}
else:
print("[DEBUG] 未找到session cookies")
print("[DEBUG] ✗ 未找到登录相关的 cookies")
return {
"success": False,
"message": "未找到登录状态,请先登录"
}
except Exception as e:
print(f"[DEBUG] 浏览器检查失败: {str(e)}")
print(f"[DEBUG] 浏览器页面操作失败: {str(e)}")
pass
finally:
# 确保页面关闭
if 'page' in locals():
await page.close()
else:
print("[DEBUG] ✗ 浏览器实例不存在")
# 检查本地是否有登录状态文件
print("[DEBUG] 检查本地登录状态文件...")
auth_file = os.path.join(config.DATA_DIR, "auth_state.json")
if os.path.exists(auth_file):
with open(auth_file, 'r', encoding='utf-8') as f:
auth_data = json.load(f)
return {
"success": True,
"message": "本地登录状态有效",
"logged_in": True,
"login_time": auth_data.get("login_time"),
"expire_time": auth_data.get("expire_time")
}
try:
with open(auth_file, 'r', encoding='utf-8') as f:
auth_data = json.load(f)
print(f"[DEBUG] ✓ 找到本地auth_state: {auth_data}")
return {
"success": True,
"message": "本地登录状态有效",
"logged_in": True,
"login_time": auth_data.get("login_time"),
"expire_time": auth_data.get("expire_time")
}
except Exception as e:
print(f"[DEBUG] ✗ 读取auth_state失败: {str(e)}")
print("[DEBUG] ✗ 未找到任何登录状态")
return {
"success": False,
"message": "未找到登录状态,请先登录"
}
except Exception as e:
print(f"[DEBUG] ✗ 检查登录状态异常: {str(e)}")
return {
"success": False,
"message": f"检查登录状态失败: {str(e)}"