ts
This commit is contained in:
+61
-17
@@ -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)}"
|
||||
|
||||
Reference in New Issue
Block a user