Skip to main content
Glama
manual_login_zhihu.py8.3 kB
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 知乎手动登录脚本 用于首次登录并保存cookies,后续可自动登录 """ import sys import os import time import json # 添加项目路径到Python路径 sys.path.append(os.path.dirname(os.path.abspath(__file__))) from zhihu_mcp_server.auth import ZhihuAuth def manual_login_and_save_cookies(): """手动登录知乎并保存cookies""" print("🚀 开始知乎手动登录流程") print("=" * 60) try: # 创建认证管理器 print("📱 正在初始化浏览器...") auth_manager = ZhihuAuth() # 设置Chrome浏览器为可见模式(用户可以看到浏览器窗口) if hasattr(auth_manager, '_setup_driver'): # 重新设置驱动为可见模式 auth_manager.driver = auth_manager._setup_driver() if not auth_manager.driver: print("❌ 无法启动Chrome浏览器") print("💡 请确保已安装Chrome浏览器和ChromeDriver") return False print("✅ 浏览器启动成功") # 打开知乎登录页面 print("🌐 正在打开知乎登录页面...") auth_manager.driver.get("https://www.zhihu.com/signin") time.sleep(3) print("\n" + "=" * 60) print("📋 请在浏览器中完成知乎登录操作") print("=" * 60) print("🔍 支持的登录方式:") print(" 1. 手机号 + 验证码登录(推荐)") print(" 2. 手机号 + 密码登录") print(" 3. 微信扫码登录") print(" 4. QQ登录") print(" 5. 微博登录") print("\n⏰ 系统将等待最多300秒(5分钟)检测登录完成") print("💡 登录成功后,cookies将自动保存,后续无需重复登录") print("=" * 60) # 等待用户手动登录,检测间隔为5秒 login_success = False max_wait_time = 300 # 300秒 = 5分钟 check_interval = 5 # 每5秒检测一次 for i in range(0, max_wait_time, check_interval): try: # 检查当前URL和页面内容来判断是否登录成功 current_url = auth_manager.driver.current_url page_source = auth_manager.driver.page_source # 检查是否已经离开登录页面 if "signin" not in current_url and "login" not in current_url: print(f"\n✅ 检测到URL变化: {current_url}") login_success = True break # 检查是否还在登录页面但已经登录 if "SignFlowHomepage" not in page_source: print(f"\n✅ 检测到页面结构变化,可能已登录") login_success = True break # 显示等待进度 remaining_time = max_wait_time - i - check_interval print(f"\r⏳ 等待登录中... 剩余时间: {remaining_time}秒", end="", flush=True) time.sleep(check_interval) except Exception as e: print(f"\n⚠️ 检测登录状态时出现异常: {e}") time.sleep(check_interval) continue print("\n") # 换行 if not login_success: print("⏰ 登录等待超时(5分钟),请重新运行脚本") auth_manager.close() return False # 验证登录状态 print("🔍 正在验证登录状态...") time.sleep(3) # 等待页面完全加载 # 尝试访问用户设置页面来确认登录 try: auth_manager.driver.get("https://www.zhihu.com/settings/profile") time.sleep(5) current_url = auth_manager.driver.current_url if "settings" in current_url: print("✅ 登录验证成功!可以访问用户设置页面") verified_login = True else: print("❌ 登录验证失败,无法访问用户设置页面") verified_login = False except: print("⚠️ 无法验证登录状态,但将尝试保存cookies") verified_login = True # 继续尝试保存cookies if verified_login: # 保存cookies print("💾 正在保存登录cookies...") try: cookies = auth_manager.driver.get_cookies() cookies_file = "zhihu_cookies.json" with open(cookies_file, 'w', encoding='utf-8') as f: json.dump(cookies, f, ensure_ascii=False, indent=2) print(f"✅ Cookies已保存到: {cookies_file}") print(f"📊 保存了 {len(cookies)} 个cookie项") # 获取用户信息 print("👤 正在获取用户信息...") try: auth_manager.driver.get("https://www.zhihu.com/settings/profile") time.sleep(3) user_info = { "login_time": time.strftime("%Y-%m-%d %H:%M:%S"), "platform": "知乎", "status": "已登录" } # 尝试获取用户名 try: username_selectors = [ "h1.css-sar5vy", ".css-1voxft1", ".ProfileHeader-name", "h1" ] for selector in username_selectors: try: username_element = auth_manager.driver.find_element("css selector", selector) if username_element and username_element.text: user_info["username"] = username_element.text break except: continue except: pass print(f"👤 用户信息: {json.dumps(user_info, ensure_ascii=False, indent=2)}") except Exception as e: print(f"⚠️ 获取用户信息失败: {e}") except Exception as e: print(f"❌ 保存cookies失败: {e}") auth_manager.close() return False # 关闭浏览器 print("🔄 关闭浏览器...") auth_manager.close() print("\n" + "=" * 60) print("🎉 知乎手动登录完成!") print("=" * 60) print("✅ 登录状态: 成功") print("✅ Cookies保存: 完成") print("💡 后续使用:") print(" - 知乎API服务器将自动使用保存的cookies") print(" - 无需重复登录,除非cookies过期") print(" - 可以开始使用知乎发布功能") print("=" * 60) return True except Exception as e: print(f"❌ 登录流程异常: {e}") if 'auth_manager' in locals() and auth_manager: auth_manager.close() return False def main(): """主函数""" success = manual_login_and_save_cookies() if success: print("\n🚀 接下来可以:") print(" 1. 启动知乎API服务器: python zhihu_http_api_server.py") print(" 2. 测试API接口: python test_zhihu_updated.py") print(" 3. 集成到多平台发布工具") else: print("\n❌ 登录失败,请重新运行脚本") print("💡 常见问题:") print(" - 确保Chrome浏览器已安装") print(" - 确保网络连接正常") print(" - 在浏览器中完成人机验证") 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