Spaces:
Running
Running
| 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() | |
| # 访问验证URL | |
| validation_url = "https://aistudio.google.com/apps" | |
| validation_page.goto(validation_url, wait_until='domcontentloaded', timeout=30000) | |
| # 等待页面加载 | |
| validation_page.wait_for_timeout(2000) | |
| # 获取最终URL | |
| 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) |