diff --git a/CHANGELOG.md b/CHANGELOG.md index f2f0f41..4d29a06 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,14 @@ # Change Log -## v1.9.03 +## v1.9.04 +1. Add: Opera GX Support | 添加 Opera GX 支持 +2. Same as v1.9.03 | 與 v1.9.03 相同 +3. Hotfix: Some Issues | 修復一些問題 +4. Add: Bypass Cursor JWT EXP Problem | 添加繞過 Cursor JWT EXP 問題 +5. Fix: Cursor editor redirects to logout page and logout automatically | 修復 Cursor 編輯器重定向到登出頁面並自動登出 +6. Fix: Some Issues | 修復一些問題 + +## v1.9.03[Skip & Merge to v1.9.04] 1. Hotfix: Some Issues | 修復一些問題 2. Add: Bypass Cursor JWT EXP Problem | 添加繞過 Cursor JWT EXP 問題 3. Fix: Cursor editor redirects to logout page and logout automatically | 修復 Cursor 編輯器重定向到登出頁面並自動登出 diff --git a/config.py b/config.py index 400353d..38cc332 100644 --- a/config.py +++ b/config.py @@ -60,18 +60,17 @@ def setup_config(translator=None): 'Browser': { 'default_browser': 'chrome', 'chrome_path': get_default_browser_path('chrome'), - 'edge_path': get_default_browser_path('edge'), - 'firefox_path': get_default_browser_path('firefox'), - 'brave_path': get_default_browser_path('brave'), 'chrome_driver_path': get_default_driver_path('chrome'), + 'edge_path': get_default_browser_path('edge'), 'edge_driver_path': get_default_driver_path('edge'), + 'firefox_path': get_default_browser_path('firefox'), 'firefox_driver_path': get_default_driver_path('firefox'), + 'brave_path': get_default_browser_path('brave'), 'brave_driver_path': get_default_driver_path('brave'), 'opera_path': get_default_browser_path('opera'), - 'opera_driver_path': get_default_driver_path('opera') - }, - 'Chrome': { - 'chromepath': get_default_browser_path('chrome') + 'opera_driver_path': get_default_driver_path('opera'), + 'operagx_path': get_default_browser_path('operagx'), + 'operagx_driver_path': get_default_driver_path('chrome') # Opera GX 使用 Chrome 驱动 }, 'Turnstile': { 'handle_turnstile_time': '2', diff --git a/oauth_auth.py b/oauth_auth.py index f70e243..a9ae3b1 100644 --- a/oauth_auth.py +++ b/oauth_auth.py @@ -305,7 +305,8 @@ class OAuthHandler: 'brave': os.path.join(os.environ.get('LOCALAPPDATA', ''), 'BraveSoftware', 'Brave-Browser', 'User Data'), 'edge': os.path.join(os.environ.get('LOCALAPPDATA', ''), 'Microsoft', 'Edge', 'User Data'), 'firefox': os.path.join(os.environ.get('APPDATA', ''), 'Mozilla', 'Firefox', 'Profiles'), - 'opera': os.path.join(os.environ.get('APPDATA', ''), 'Opera Software', 'Opera Stable') + 'opera': os.path.join(os.environ.get('APPDATA', ''), 'Opera Software', 'Opera Stable'), + 'operagx': os.path.join(os.environ.get('APPDATA', ''), 'Opera Software', 'Opera GX Stable') } elif sys.platform == 'darwin': # macOS user_data_dirs = { @@ -313,7 +314,8 @@ class OAuthHandler: 'brave': os.path.expanduser('~/Library/Application Support/BraveSoftware/Brave-Browser'), 'edge': os.path.expanduser('~/Library/Application Support/Microsoft Edge'), 'firefox': os.path.expanduser('~/Library/Application Support/Firefox/Profiles'), - 'opera': os.path.expanduser('~/Library/Application Support/com.operasoftware.Opera') + 'opera': os.path.expanduser('~/Library/Application Support/com.operasoftware.Opera'), + 'operagx': os.path.expanduser('~/Library/Application Support/com.operasoftware.OperaGX') } else: # Linux user_data_dirs = { @@ -321,7 +323,8 @@ class OAuthHandler: 'brave': os.path.expanduser('~/.config/BraveSoftware/Brave-Browser'), 'edge': os.path.expanduser('~/.config/microsoft-edge'), 'firefox': os.path.expanduser('~/.mozilla/firefox'), - 'opera': os.path.expanduser('~/.config/opera') + 'opera': os.path.expanduser('~/.config/opera'), + 'operagx': os.path.expanduser('~/.config/opera-gx') } # 获取选定浏览器的用户数据目录,如果找不到则使用 Chrome 的 diff --git a/utils.py b/utils.py index 8a66dbd..8922f86 100644 --- a/utils.py +++ b/utils.py @@ -84,14 +84,24 @@ def get_default_browser_path(browser_type='chrome'): r"C:\Program Files\Opera\opera.exe", r"C:\Program Files (x86)\Opera\opera.exe", os.path.join(os.environ.get('LOCALAPPDATA', ''), 'Programs', 'Opera', 'launcher.exe'), - os.path.join(os.environ.get('LOCALAPPDATA', ''), 'Programs', 'Opera', 'opera.exe'), - os.path.join(os.environ.get('LOCALAPPDATA', ''), 'Programs', 'Opera GX', 'launcher.exe'), - os.path.join(os.environ.get('LOCALAPPDATA', ''), 'Programs', 'Opera GX', 'opera.exe') + os.path.join(os.environ.get('LOCALAPPDATA', ''), 'Programs', 'Opera', 'opera.exe') ] for path in opera_paths: if os.path.exists(path): return path return opera_paths[0] # 返回第一个路径,即使它不存在 + elif browser_type == 'operagx': + # 尝试多个可能的 Opera GX 路径 + operagx_paths = [ + os.path.join(os.environ.get('LOCALAPPDATA', ''), 'Programs', 'Opera GX', 'launcher.exe'), + os.path.join(os.environ.get('LOCALAPPDATA', ''), 'Programs', 'Opera GX', 'opera.exe'), + r"C:\Program Files\Opera GX\opera.exe", + r"C:\Program Files (x86)\Opera GX\opera.exe" + ] + for path in operagx_paths: + if os.path.exists(path): + return path + return operagx_paths[0] # 返回第一个路径,即使它不存在 elif browser_type == 'brave': # Brave 浏览器的默认安装路径 paths = [ @@ -115,6 +125,8 @@ def get_default_browser_path(browser_type='chrome'): return "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser" elif browser_type == 'opera': return "/Applications/Opera.app/Contents/MacOS/Opera" + elif browser_type == 'operagx': + return "/Applications/Opera GX.app/Contents/MacOS/Opera" else: # Linux if browser_type == 'chrome': @@ -135,6 +147,18 @@ def get_default_browser_path(browser_type='chrome'): return "/usr/bin/firefox" elif browser_type == 'opera': return "/usr/bin/opera" + elif browser_type == 'operagx': + # 尝试常见的 Opera GX 路径 + operagx_names = ["opera-gx"] + for name in operagx_names: + try: + import shutil + path = shutil.which(name) + if path: + return path + except: + pass + return "/usr/bin/opera-gx" elif browser_type == 'brave': # 尝试常见的 Brave 路径 brave_names = ["brave", "brave-browser"]