BOM发料对比
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user