From e090f546c6cc71055db7888d8a9b256c68d3c1da Mon Sep 17 00:00:00 2001 From: bwstudio <7469504@qq.com> Date: Thu, 5 Mar 2026 08:33:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=8F=8C=E9=87=8D=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=E6=9C=BA=E5=88=B6=EF=BC=9A=E4=BC=98=E5=85=88=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E6=9C=AC=E5=9C=B0cookies=EF=BC=8C=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E6=97=B6=E5=9B=9E=E9=80=80=E5=88=B0=E6=9C=8D=E5=8A=A1=E5=99=A8?= =?UTF-8?q?cookies?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cookie_data.json | 36 ++----------------- monitor.py | 88 +++++++++++++++++++++++++++++++++++------------ notify_state.json | 10 ------ 3 files changed, 68 insertions(+), 66 deletions(-) delete mode 100644 notify_state.json diff --git a/cookie_data.json b/cookie_data.json index d2b7e01..c026136 100644 --- a/cookie_data.json +++ b/cookie_data.json @@ -8,44 +8,12 @@ }, "用户B": { "lmkbi.95155.com": { - "cookies": [ - { - "name": "_qimei_uuid42", - "value": "1a302130f16100ca18af370a47cb8afce807c4a076", - "domain": ".95155.com" - }, - { - "name": "_qimei_fingerprint", - "value": "50aa79f919511142818459f44ac38dee", - "domain": ".95155.com" - }, - { - "name": "_qimei_i_3", - "value": "64c844d0c35e05dc9796fc355d8470e5a3eba5f0410e00d3e78c2d0e2f95293d306031943c89e29eb6a6", - "domain": ".95155.com" - }, - { - "name": "_qimei_h38", - "value": "f8e0750618af370a47cb8afc0200000c91a302", - "domain": ".95155.com" - }, - { - "name": "_qimei_i_1", - "value": "42d946d49d0f50dcc497f83153d525e3f0eef5f51508518ae5d97b582493206c6163649c39d8e1dcd4a9dffb", - "domain": ".95155.com" - } - ], + "cookies": [], "url": "https://lmkbi.95155.com/bi-system/#/carUnpetrifiedComAll", "website_name": "网站A" }, "192.168.1.200:8006": { - "cookies": [ - { - "name": "PVELangCookie", - "value": "zh_CN", - "domain": "192.168.1.200" - } - ], + "cookies": [], "url": "https://192.168.1.200:8006/", "website_name": "网站B" } diff --git a/monitor.py b/monitor.py index a577c57..70708dd 100644 --- a/monitor.py +++ b/monitor.py @@ -192,18 +192,6 @@ class CookieMonitor: logger.info(f"用户 {user_name} 没有配置网站,跳过") return - cookie_cloud = CookieCloud( - api_url=cookie_cloud_config.get('api_url', ''), - uuid=cookie_cloud_config.get('uuid', ''), - password=cookie_cloud_config.get('password', '') - ) - - logger.info(f"步骤1: 从 Cookie Cloud 获取所有 cookies") - all_cookies = cookie_cloud.get_cookies() - total_domains = len(all_cookies) - total_cookies = sum(len(c) for c in all_cookies.values()) - logger.info(f"获取到 {total_domains} 个域名,共 {total_cookies} 个 cookie") - browser = BrowserManager( browser_type=browser_config.get('type', 'edge'), headless=browser_config.get('headless', False) @@ -218,6 +206,20 @@ class CookieMonitor: } try: + logger.info(f"步骤1: 从本地 cookie_data.json 读取用户 cookies") + local_cookies = self._load_local_cookies(user_name) + + logger.info(f"步骤1.5: 从 Cookie Cloud 获取所有 cookies") + cookie_cloud = CookieCloud( + api_url=cookie_cloud_config.get('api_url', ''), + uuid=cookie_cloud_config.get('uuid', ''), + password=cookie_cloud_config.get('password', '') + ) + all_cookies = cookie_cloud.get_cookies() + total_domains = len(all_cookies) + total_cookies = sum(len(c) for c in all_cookies.values()) + logger.info(f"获取到 {total_domains} 个域名,共 {total_cookies} 个 cookie") + logger.info(f"步骤2: 初始化浏览器") browser.init_browser() @@ -227,7 +229,8 @@ class CookieMonitor: user_name=user_name, website_config=website, browser=browser, - all_cookies=all_cookies + all_cookies=all_cookies, + local_cookies=local_cookies ) user_results['websites'].append(result) @@ -246,19 +249,33 @@ class CookieMonitor: finally: browser.close() + def _load_local_cookies(self, user_name: str) -> dict: + """从本地 cookie_data.json 读取用户的 cookies""" + filename = "cookie_data.json" + if not os.path.exists(filename): + return {} + + try: + with open(filename, 'r', encoding='utf-8') as f: + cookie_data = json.load(f) + return cookie_data.get(user_name, {}) + except: + return {} + def process_website( self, user_name: str, website_config: dict, browser: BrowserManager, - all_cookies: dict + all_cookies: dict, + local_cookies: dict ) -> dict: """验证网站登录状态""" website_name = website_config.get('name', '未知网站') url = website_config.get('url', '') check_selector = website_config.get('login_check_selector', '') success_text = website_config.get('success_text', '') - + logger.info(f"\n验证网站: {website_name}") logger.info(f" URL: {url}") @@ -279,18 +296,18 @@ class CookieMonitor: domain = parsed.netloc domain_cookies = [] - for cookie_domain, cookies in all_cookies.items(): + for cookie_domain, cookies in local_cookies.items(): clean_domain = cookie_domain.lstrip('.') if domain in clean_domain or clean_domain in domain: domain_cookies.extend(cookies) if domain_cookies: - logger.info(f" 找到 {len(domain_cookies)} 个相关 cookie") + logger.info(f" 找到 {len(domain_cookies)} 个本地 cookie") success_count = browser.import_cookies(domain_cookies, domain) logger.info(f" 成功导入 {success_count} 个 cookie") else: - logger.warning(f" 未找到相关 cookie") - + logger.warning(f" 未找到本地 cookie") + login_success = browser.verify_login( url=url, check_selector=check_selector, @@ -299,12 +316,39 @@ class CookieMonitor: if login_success: result['success'] = True - logger.info(f" ✓ 登录验证成功") + logger.info(f" ✓ 使用本地 cookie 登录验证成功") self._save_cookies_to_file(domain_cookies, url, website_name, user_name) else: - result['error'] = '登录状态验证失败(cookies可能已过期或选择器配置错误)' - logger.warning(f" ✗ {result['error']}") + logger.warning(f" ✗ 本地 cookie 登录失败,尝试使用服务器 cookie") + + domain_cookies = [] + for cookie_domain, cookies in all_cookies.items(): + clean_domain = cookie_domain.lstrip('.') + if domain in clean_domain or clean_domain in domain: + domain_cookies.extend(cookies) + + if domain_cookies: + logger.info(f" 找到 {len(domain_cookies)} 个服务器 cookie") + success_count = browser.import_cookies(domain_cookies, domain) + logger.info(f" 成功导入 {success_count} 个 cookie") + else: + logger.warning(f" 未找到服务器 cookie") + + login_success = browser.verify_login( + url=url, + check_selector=check_selector, + success_text=success_text + ) + + if login_success: + result['success'] = True + logger.info(f" ✓ 使用服务器 cookie 登录验证成功") + + self._save_cookies_to_file(domain_cookies, url, website_name, user_name) + else: + result['error'] = '登录状态验证失败(本地和服务器 cookie 都无效)' + logger.warning(f" ✗ {result['error']}") except Exception as e: result['error'] = f'处理异常: {str(e)}' diff --git a/notify_state.json b/notify_state.json deleted file mode 100644 index b86f152..0000000 --- a/notify_state.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "用户A": { - "date": "2026-03-04", - "hour": 22 - }, - "用户B": { - "date": "2026-03-04", - "hour": 22 - } -} \ No newline at end of file