AIStudioBuildWS / browser /cookie_validator.py
hkfires's picture
feat: make logger timezone configurable via TZ_OFFSET
d280cfc verified
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)