BOM发料对比
This commit is contained in:
@@ -13,7 +13,9 @@ import urllib.request
|
||||
from pathlib import Path
|
||||
from dotenv import load_dotenv
|
||||
from DrissionPage import ChromiumPage, ChromiumOptions
|
||||
from DrissionPage._base.chromium import handle_options
|
||||
from DrissionPage._base.chromium import Chromium, handle_options
|
||||
from DrissionPage._base.driver import BrowserDriver
|
||||
from DrissionPage._pages.chromium_tab import ChromiumTab
|
||||
|
||||
# ── 加载 .env ─────────────────────────────────────────────────────────────────
|
||||
load_dotenv(Path(__file__).parent / ".env")
|
||||
@@ -99,6 +101,17 @@ def cleanup_debug_port(address: str) -> None:
|
||||
)
|
||||
|
||||
|
||||
def clear_drission_singletons() -> None:
|
||||
"""
|
||||
清理 DrissionPage 的全局单例缓存。
|
||||
失败后的半初始化对象会残留在这些缓存中,后续重试会错误复用脏对象。
|
||||
"""
|
||||
Chromium._BROWSERS.clear()
|
||||
ChromiumPage._PAGES.clear()
|
||||
ChromiumTab._TABS.clear()
|
||||
BrowserDriver.BROWSERS.clear()
|
||||
|
||||
|
||||
def probe_devtools_endpoints(address: str, log_output: bool = True) -> dict:
|
||||
"""探测 DevTools HTTP 端点,并返回解析后的版本信息与标签页信息。"""
|
||||
result = {"version": None, "list": None}
|
||||
@@ -166,6 +179,9 @@ def get_page(headless: bool = False, port: int = 9222) -> ChromiumPage:
|
||||
browser_path = resolve_browser_path()
|
||||
effective_headless = headless or is_docker
|
||||
|
||||
if is_docker:
|
||||
clear_drission_singletons()
|
||||
|
||||
if effective_headless:
|
||||
co.set_argument("--headless=new")
|
||||
co.set_argument("--disable-gpu")
|
||||
@@ -227,6 +243,7 @@ def get_page(headless: bool = False, port: int = 9222) -> ChromiumPage:
|
||||
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)
|
||||
@@ -238,6 +255,7 @@ def get_page(headless: bool = False, port: int = 9222) -> ChromiumPage:
|
||||
|
||||
log("WARN", f"[DEBUG] 尝试清理地址 {actual_address} 后重试...")
|
||||
try:
|
||||
clear_drission_singletons()
|
||||
cleanup_debug_port(actual_address)
|
||||
time.sleep(1)
|
||||
page = ChromiumPage(opt)
|
||||
|
||||
Reference in New Issue
Block a user