BOM发料对比
This commit is contained in:
@@ -13,7 +13,9 @@ import urllib.request
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
from DrissionPage import ChromiumPage, ChromiumOptions
|
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 ─────────────────────────────────────────────────────────────────
|
# ── 加载 .env ─────────────────────────────────────────────────────────────────
|
||||||
load_dotenv(Path(__file__).parent / ".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:
|
def probe_devtools_endpoints(address: str, log_output: bool = True) -> dict:
|
||||||
"""探测 DevTools HTTP 端点,并返回解析后的版本信息与标签页信息。"""
|
"""探测 DevTools HTTP 端点,并返回解析后的版本信息与标签页信息。"""
|
||||||
result = {"version": None, "list": None}
|
result = {"version": None, "list": None}
|
||||||
@@ -166,6 +179,9 @@ def get_page(headless: bool = False, port: int = 9222) -> ChromiumPage:
|
|||||||
browser_path = resolve_browser_path()
|
browser_path = resolve_browser_path()
|
||||||
effective_headless = headless or is_docker
|
effective_headless = headless or is_docker
|
||||||
|
|
||||||
|
if is_docker:
|
||||||
|
clear_drission_singletons()
|
||||||
|
|
||||||
if effective_headless:
|
if effective_headless:
|
||||||
co.set_argument("--headless=new")
|
co.set_argument("--headless=new")
|
||||||
co.set_argument("--disable-gpu")
|
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):
|
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}")
|
log("WARN", f"[DEBUG] Browser WS 握手失败,尝试降级连接 Page WS: {fallback_page_ws}")
|
||||||
try:
|
try:
|
||||||
|
clear_drission_singletons()
|
||||||
fallback_co = ChromiumOptions()
|
fallback_co = ChromiumOptions()
|
||||||
fallback_co.set_address(fallback_page_ws)
|
fallback_co.set_address(fallback_page_ws)
|
||||||
page = ChromiumPage(fallback_co)
|
page = ChromiumPage(fallback_co)
|
||||||
@@ -238,6 +255,7 @@ def get_page(headless: bool = False, port: int = 9222) -> ChromiumPage:
|
|||||||
|
|
||||||
log("WARN", f"[DEBUG] 尝试清理地址 {actual_address} 后重试...")
|
log("WARN", f"[DEBUG] 尝试清理地址 {actual_address} 后重试...")
|
||||||
try:
|
try:
|
||||||
|
clear_drission_singletons()
|
||||||
cleanup_debug_port(actual_address)
|
cleanup_debug_port(actual_address)
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
page = ChromiumPage(opt)
|
page = ChromiumPage(opt)
|
||||||
|
|||||||
Reference in New Issue
Block a user