Skip to main content
Glama
debug_login_status.py8.24 kB
#!/usr/bin/env python # -*- coding: utf-8 -*- """ 知乎登录状态调试脚本 用于检测知乎登录状态、验证cookies文件和直接检查登录状态 """ import os import sys import json import time import logging from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.options import Options # 配置日志 logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) logger = logging.getLogger(__name__) # 添加项目根目录到路径以便导入 sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) # 导入知乎认证模块 from zhihu_mcp_server.auth import ZhihuAuth def check_cookies_file(): """检查cookies文件状态""" cookies_file = "zhihu_cookies.json" if not os.path.exists(cookies_file): logger.error(f"Cookies文件不存在: {cookies_file}") return False try: with open(cookies_file, 'r', encoding='utf-8') as f: cookies = json.load(f) if not cookies: logger.error("Cookies文件为空") return False logger.info(f"Cookies文件有效,包含 {len(cookies)} 个cookie项") logger.info(f"Cookies文件大小: {os.path.getsize(cookies_file)} 字节") # 输出一些关键cookie(如果存在) important_cookies = ["z_c0", "SESSIONID", "_zap", "d_c0"] for name in important_cookies: for cookie in cookies: if cookie.get("name") == name: logger.info(f"找到关键cookie: {name} (过期时间: {cookie.get('expiry', 'N/A')})") break return True except Exception as e: logger.error(f"读取Cookies文件失败: {e}") return False def manual_check_login(): """直接使用Selenium检查登录状态""" logger.info("开始直接检查登录状态...") try: # 设置Chrome选项 chrome_options = Options() chrome_options.add_argument("--no-sandbox") chrome_options.add_argument("--disable-dev-shm-usage") chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) driver = webdriver.Chrome(options=chrome_options) logger.info(f"Chrome驱动创建成功,Session ID: {driver.session_id}") # 加载cookies driver.get("https://www.zhihu.com") time.sleep(2) cookies_file = "zhihu_cookies.json" if os.path.exists(cookies_file): with open(cookies_file, 'r', encoding='utf-8') as f: cookies = json.load(f) for cookie in cookies: # 修正cookie格式 if 'domain' in cookie and cookie['domain']: if cookie['domain'].startswith('.'): cookie['domain'] = cookie['domain'][1:] try: driver.add_cookie(cookie) except Exception as e: logger.warning(f"添加cookie失败: {cookie.get('name', 'N/A')} - {e}") # 刷新页面 driver.refresh() time.sleep(3) # 检查页面状态 current_url = driver.current_url logger.info(f"当前URL: {current_url}") # 检查是否有登录按钮 try: login_btn = driver.find_element(By.XPATH, "//button[contains(text(), '登录/注册')]") if login_btn.is_displayed(): logger.warning("检测到登录/注册按钮,可能未登录") else: logger.info("未发现登录/注册按钮") except: logger.info("未找到登录/注册按钮,可能已登录") # 尝试访问设置页面 driver.get("https://www.zhihu.com/settings/profile") time.sleep(3) current_url = driver.current_url logger.info(f"设置页面URL: {current_url}") # 根据URL判断登录状态 if "settings" in current_url: logger.info("可以访问设置页面,已登录") login_status = True else: logger.warning(f"无法访问设置页面 (当前URL: {current_url}),可能未登录") login_status = False # 检查页面内容 page_source = driver.page_source if "登录" in page_source and "注册" in page_source: logger.warning("页面内容包含'登录'和'注册'关键词,可能未登录") else: logger.info("页面内容不含明显的登录/注册关键词") # 尝试获取用户名等信息 try: # 检查是否有用户头像 avatar_selectors = [ ".Avatar", ".AppHeader-profile", ".UserAvatar", ".UserLink-link" ] found_avatar = False for selector in avatar_selectors: try: avatar = driver.find_element(By.CSS_SELECTOR, selector) if avatar.is_displayed(): logger.info(f"检测到用户头像元素: {selector}") found_avatar = True break except: pass if not found_avatar: logger.warning("未检测到用户头像元素") except Exception as e: logger.error(f"检查用户信息元素失败: {e}") # 关闭浏览器 driver.quit() return login_status except Exception as e: logger.error(f"直接检查登录状态失败: {e}") return False def test_auth_module(): """测试认证模块的登录状态检查""" logger.info("开始测试认证模块...") try: # 创建认证管理器实例 auth = ZhihuAuth() # 检查登录状态 login_status = auth.check_login_status() logger.info(f"认证模块报告的登录状态: {'已登录' if login_status else '未登录'}") # 获取用户信息 if login_status: user_info = auth.get_user_info() logger.info(f"用户信息: {user_info}") # 关闭浏览器 auth.close() return login_status except Exception as e: logger.error(f"测试认证模块失败: {e}") return False def main(): """主函数""" logger.info("===== 知乎登录状态调试开始 =====") # 检查cookies文件 logger.info("----- 检查Cookies文件 -----") cookies_valid = check_cookies_file() logger.info(f"Cookies文件状态: {'有效' if cookies_valid else '无效'}") # 直接检查登录状态 logger.info("----- 直接检查登录状态 -----") direct_login = manual_check_login() logger.info(f"直接检查登录状态: {'已登录' if direct_login else '未登录'}") # 测试认证模块 logger.info("----- 测试认证模块 -----") auth_login = test_auth_module() logger.info(f"认证模块登录状态: {'已登录' if auth_login else '未登录'}") # 总结 logger.info("===== 知乎登录状态调试总结 =====") logger.info(f"1. Cookies文件: {'有效' if cookies_valid else '无效'}") logger.info(f"2. 直接检查: {'已登录' if direct_login else '未登录'}") logger.info(f"3. 认证模块: {'已登录' if auth_login else '未登录'}") if direct_login and not auth_login: logger.warning("发现不一致: 直接检查显示已登录,但认证模块报告未登录") logger.warning("可能是认证模块的登录检测逻辑与实际不符") elif not direct_login and auth_login: logger.warning("发现不一致: 直接检查显示未登录,但认证模块报告已登录") logger.warning("可能是认证模块的登录检测不够严格") logger.info("===== 知乎登录状态调试结束 =====") if __name__ == "__main__": main()

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/chemany/zhihu_mcp_server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server