|
|
import time |
|
|
import sys |
|
|
from playwright.sync_api import TimeoutError, Error as PlaywrightError |
|
|
|
|
|
|
|
|
class CookieValidator: |
|
|
"""Cookie验证器,负责定期验证Cookie的有效性。""" |
|
|
|
|
|
def __init__(self, page, context, logger): |
|
|
""" |
|
|
初始化Cookie验证器 |
|
|
|
|
|
Args: |
|
|
page: 主页面实例 |
|
|
context: 浏览器上下文 |
|
|
logger: 日志记录器 |
|
|
""" |
|
|
self.page = page |
|
|
self.context = context |
|
|
self.logger = logger |
|
|
|
|
|
|
|
|
def validate_cookies_in_main_thread(self): |
|
|
""" |
|
|
在主线程中执行Cookie验证(由主线程调用) |
|
|
|
|
|
Returns: |
|
|
bool: Cookie是否有效 |
|
|
""" |
|
|
validation_page = None |
|
|
try: |
|
|
|
|
|
self.logger.info("开始Cookie验证...") |
|
|
validation_page = self.context.new_page() |
|
|
|
|
|
|
|
|
validation_url = "https://aistudio.google.com/apps" |
|
|
validation_page.goto(validation_url, wait_until='domcontentloaded', timeout=30000) |
|
|
|
|
|
|
|
|
validation_page.wait_for_timeout(2000) |
|
|
|
|
|
|
|
|
final_url = validation_page.url |
|
|
|
|
|
|
|
|
if "accounts.google.com/v3/signin/identifier" in final_url: |
|
|
self.logger.error("Cookie验证失败: 被重定向到登录页面") |
|
|
return False |
|
|
|
|
|
if "accounts.google.com/v3/signin/accountchooser" in final_url: |
|
|
self.logger.error("Cookie验证失败: 被重定向到账户选择页面") |
|
|
return False |
|
|
|
|
|
|
|
|
self.logger.info("Cookie验证成功") |
|
|
return True |
|
|
|
|
|
except TimeoutError: |
|
|
self.logger.error("Cookie验证失败: 页面加载超时") |
|
|
return False |
|
|
|
|
|
except PlaywrightError as e: |
|
|
self.logger.error(f"Cookie验证失败: {e}") |
|
|
return False |
|
|
|
|
|
except Exception as e: |
|
|
self.logger.error(f"Cookie验证失败: {e}") |
|
|
return False |
|
|
|
|
|
finally: |
|
|
|
|
|
if validation_page: |
|
|
try: |
|
|
validation_page.close() |
|
|
except Exception: |
|
|
pass |
|
|
|
|
|
def shutdown_instance_on_cookie_failure(self): |
|
|
""" |
|
|
因Cookie失效而关闭实例 |
|
|
""" |
|
|
self.logger.error("Cookie失效,关闭实例") |
|
|
time.sleep(1) |
|
|
sys.exit(1) |