BOM发料对比

This commit is contained in:
hjq
2026-06-26 20:04:22 +08:00
parent ff8b8b1e40
commit 4d1ad3402e

View File

@@ -98,17 +98,32 @@ def patch_drission_ws_handshake() -> None:
break break
raise last_err raise last_err
if is_linux_env(): # 重新补回 WS 握手补丁,这两个补丁都需要
# 如果是老版的 create_connection替换它 if is_linux_env() and not getattr(dp_driver_module, "_DTSK_WS_PATCHED", False):
dp_driver_module.create_connection = resilient_create_connection dp_driver_module.create_connection = resilient_create_connection
# 覆盖 websocket-client 原生的 create_connection 避免某些模块直接引用
import websocket import websocket
websocket.create_connection = resilient_create_connection websocket.create_connection = resilient_create_connection
# 还有可能是通过导入的方式,比如 from websocket import create_connection
# 我们需要在 driver.py 中覆盖它
import DrissionPage._base.driver as driver_mod import DrissionPage._base.driver as driver_mod
driver_mod.create_connection = resilient_create_connection driver_mod.create_connection = resilient_create_connection
dp_driver_module._DTSK_WS_PATCHED = True dp_driver_module._DTSK_WS_PATCHED = True
# 之前加在 ChromiumPage(opt) 前面其实没用,因为 run_browser 是在 ChromiumPage 实例化时才触发启动。
# 真正的解决办法是拦截原生库里去请求 /json/version 的那段代码。
if is_linux_env() and not getattr(dp_driver_module, "_DTSK_UUID_PATCHED", False):
import DrissionPage._functions.browser as dp_browser_module
# 保存原生的 run_browser 函数
original_run_browser = dp_browser_module._run_browser
def resilient_run_browser(port, path, args):
log("INFO", "[DEBUG] 拦截到 _run_browser 启动 Chrome强制等待 2 秒以防 UUID 跳变...")
res = original_run_browser(port, path, args)
time.sleep(2)
return res
# 替换它
dp_browser_module._run_browser = resilient_run_browser
dp_driver_module._DTSK_UUID_PATCHED = True
# ==============================================================
patch_drission_ws_handshake() patch_drission_ws_handshake()
@@ -368,6 +383,9 @@ def get_page(headless: bool = False, port: int = 9222) -> ChromiumPage:
if browser_path: if browser_path:
new_co.set_browser_path(browser_path) new_co.set_browser_path(browser_path)
log("INFO", "[DEBUG] 等待 2 秒,让清理后重启的 Chrome 彻底准备好 UUID...")
time.sleep(2)
page = ChromiumPage(new_co) page = ChromiumPage(new_co)
log("OK", "[DEBUG] 清理后重试实例化 ChromiumPage 成功!") log("OK", "[DEBUG] 清理后重试实例化 ChromiumPage 成功!")
return page return page