import time import json from typing import Dict, List, Any from config import ConfigManager from login_manager import LoginManager from logger_config import global_logger as logger class AutoLoginApp: """ 自动登录应用主类 """ def __init__(self): """ 初始化自动登录应用 """ self.config_manager = ConfigManager() self.login_manager = LoginManager() def run(self): """ 运行自动登录应用 """ logger.info("===== 自动登录应用启动 =====") # 加载配置 config = self.config_manager.load_config() sites = config.get('sites', []) if not sites: logger.warning("配置中没有设置任何网站,使用默认示例网站") # 添加默认示例网站 sites = [ {'name': '百度', 'url': 'https://www.baidu.com'}, {'name': '新浪', 'url': 'https://www.sina.com.cn'} ] # 处理每个网站 for site in sites: site_name = site.get('name', '未知网站') site_url = site.get('url', '') if not site_url: logger.warning(f"网站 '{site_name}' 的URL为空,跳过") continue logger.info(f"处理网站: {site_name} ({site_url})") # 获取cookies(从配置中) cookies = [] if 'cookies' in site: config_cookies = site['cookies'] # 确保cookies是列表格式 if isinstance(config_cookies, dict): # 直接将字典转换为列表格式 cookies = [] for key, value in config_cookies.items(): cookies.append({ 'name': key, 'value': value, 'domain': '', 'path': '/', 'expires': 0, 'secure': False, 'httpOnly': False }) else: cookies = config_cookies logger.info(f"使用配置文件中的 {len(cookies)} 条cookies记录") # 登录网站 login_success = self.login_manager.login(site_url, cookies) if login_success: logger.info(f"登录网站 '{site_name}' 成功") # 保持登录状态一段时间,从配置中获取duration值,默认30秒 duration = site.get('duration', 30) self.login_manager.maintain_login(duration=duration) # 保持{duration}秒 # 保持登录状态后获取并更新到配置中的cookies new_cookies = self.login_manager.get_cookies() if new_cookies: # 更新当前site对象的cookies site['cookies'] = new_cookies logger.info(f"已更新网站 '{site_name}' 的cookies到配置中,共 {len(new_cookies)} 条记录") else: logger.error(f"登录网站 '{site_name}' 失败") # 关闭当前浏览器页面,准备下一个网站 self.login_manager.close() time.sleep(2) # 间隔2秒再处理下一个网站 # 保存更新后的配置到config.json try: self.config_manager.save_config(config) logger.info("已将更新后的cookies保存到config.json文件中") except Exception as e: logger.error(f"保存配置文件时发生错误: {e}") logger.info("===== 所有网站处理完成 =====") if __name__ == "__main__": app = AutoLoginApp() try: app.run() except KeyboardInterrupt: logger.info("程序被用户中断") except Exception as e: logger.error(f"程序运行时发生错误: {e}") finally: # 确保关闭浏览器 app.login_manager.close()