diff --git a/browser_login/login.py b/browser_login/login.py index 333ed9c..2c887e7 100644 --- a/browser_login/login.py +++ b/browser_login/login.py @@ -9,7 +9,6 @@ import shutil import json import datetime import subprocess -import urllib.request from pathlib import Path from dotenv import load_dotenv from DrissionPage import ChromiumPage, ChromiumOptions @@ -66,16 +65,8 @@ def patch_drission_ws_handshake() -> None: kwargs.pop("host", None) kwargs.pop("origin", None) - target_url = address.replace( - "localhost", - "127.0.0.1" - ) - - log("INFO", f"[DEBUG] WS URL: {target_url}") - log("INFO", f"[DEBUG] WS KWARGS: {kwargs}") - return raw_ws_create_connection( - target_url, + address.replace("localhost", "127.0.0.1"), **kwargs ) @@ -170,45 +161,6 @@ def clear_drission_singletons() -> None: BrowserDriver.BROWSERS.clear() -def probe_devtools_endpoints(address: str, log_output: bool = True) -> dict: - """探测 DevTools HTTP 端点,并返回解析后的版本信息与标签页信息。""" - result = {"version": None, "list": None} - if not address: - return result - - endpoint_map = {"version": "json/version", "list": "json/list"} - for key, endpoint in endpoint_map.items(): - url = f"http://{address}/{endpoint}" - try: - with urllib.request.urlopen(url, timeout=2) as resp: - body = resp.read().decode("utf-8", errors="replace") - if log_output: - log("WARN", f"[DEBUG] DevTools 探测 {url} -> HTTP {resp.status}") - log("WARN", f"[DEBUG] DevTools 响应体 {endpoint}: {body[:1000]}") - result[key] = json.loads(body) - except Exception as probe_err: - if log_output: - log("WARN", f"[DEBUG] DevTools 探测失败 {url}: {probe_err}") - return result - - -def get_first_page_ws_address(devtools_payload: dict) -> str: - """从 /json/list 响应中提取第一个可用 page/webview 的 ws 地址。""" - tabs = devtools_payload.get("list") or [] - if not isinstance(tabs, list): - return "" - - for tab in tabs: - if ( - isinstance(tab, dict) - and tab.get("type") in ("page", "webview") - and not str(tab.get("url", "")).startswith("devtools://") - and tab.get("webSocketDebuggerUrl") - ): - return tab["webSocketDebuggerUrl"] - return "" - - # ── 日志 ────────────────────────────────────────────────────────────────────── def log(level: str, msg: str): icons = {"INFO": "ℹ️ ", "OK": "✅", "WARN": "⚠️ ", "ERR": "❌"} @@ -298,22 +250,6 @@ def get_page(headless: bool = False, port: int = 9222) -> ChromiumPage: actual_address = opt.address or f"127.0.0.1:{port}" log("WARN", f"[DEBUG] ChromiumPage 初始化失败: {e}") - devtools_payload = probe_devtools_endpoints(actual_address, log_output=True) if opt.address else {"version": None, "list": None} - fallback_page_ws = get_first_page_ws_address(devtools_payload) - - if is_linux_env() and fallback_page_ws and "Handshake status 404 Not Found" in str(e): - log("WARN", f"[DEBUG] Browser WS 握手失败,尝试降级连接 Page WS: {fallback_page_ws}") - try: - clear_drission_singletons() - fallback_co = ChromiumOptions() - fallback_co.set_address(fallback_page_ws) - page = ChromiumPage(fallback_co) - log("OK", "[DEBUG] 已通过 Page WS 降级连接成功。") - return page - except Exception as ws_only_e: - log("ERR", f"[DEBUG] Page WS 降级连接失败: {ws_only_e}") - e = ws_only_e - log("WARN", f"[DEBUG] 尝试清理地址 {actual_address} 后重试...") try: clear_drission_singletons() @@ -326,10 +262,6 @@ def get_page(headless: bool = False, port: int = 9222) -> ChromiumPage: log("ERR", f"[DEBUG] 清理后重试依然失败: {retry_e}") e = retry_e - # #region debug-point B:devtools-http-probe - if not opt.address: - log("WARN", "[DEBUG] DevTools 探测跳过:address 为空") - # #endregion log("ERR", f"浏览器初始化失败: {e}") raise