实现双重验证机制:优先使用本地cookies,失败时回退到服务器cookies
This commit is contained in:
+2
-34
@@ -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"
|
||||
}
|
||||
|
||||
+66
-22
@@ -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)}'
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
{
|
||||
"用户A": {
|
||||
"date": "2026-03-04",
|
||||
"hour": 22
|
||||
},
|
||||
"用户B": {
|
||||
"date": "2026-03-04",
|
||||
"hour": 22
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user