File size: 2,647 Bytes
e15281a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d280cfc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
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)