You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chrome Selenium CDP Bidi API:新Target Session命令无效问题求助

监听TargetCreated事件并向新发现的Target发送CDP命令失败

使用最新版Selenium与Chrome,在监听TargetCreated事件并向每个新发现的Target发送CDP命令时遇到问题:

1. 初始Bidi会话执行正常

启动Bidi会话并发送命令可成功覆盖JavaScript属性,代码如下:

async with self.driver.bidi_connection() as connection:
    self.cdp_bidi_main_session, self.cdp_bidi_main_devtools, self.cdp_cdp = connection.session, connection.devtools, connection.cdp
    await self.cdp_bidi_main_session.execute(self.cdp_bidi_main_devtools.page.enable())
    await self.__inject_javascript_object_via_bidi(self.cdp_bidi_main_session, self.cdp_bidi_main_devtools)

2. TargetCreated事件处理未达预期

成功监听并接收TargetCreated事件后,附加到目标并启动会话发送命令没有效果,代码如下:

event = new_targetcreated_event_received
async with self.driver.bidi_connection_with_target(event.target_info.target_id, self.target_attached_counter) as connection: # 已修改Selenium Bidi源码,支持选择会话目标并递增命令ID
    cdp_bidi_main_session, cdp_bidi_main_devtools, cdp_cdp, cdp_ws_url = connection.session, connection.devtools, connection.cdp, connection.ws_url
    await cdp_bidi_main_session.execute(cdp_bidi_main_devtools.page.enable())
    # await trio.sleep(2) -> 无差异
    await self.__inject_javascript_object_via_bidi(cdp_bidi_main_session, cdp_bidi_main_devtools)

已尝试的方案

  • 使用手动会话命令发送工具
  • 深入研究WS CDP协议
  • 暂未尝试在启动新会话前断开旧会话(会终止监听器,操作难度大)

命令输出示例

F054E949597158BF152714D31B7D2DBD
{"method": "Target.getTargets", "params": {}, "id": 0}
{"method": "Target.attachToTarget", "params": {"targetId": "F054E949597158BF152714D31B7D2DBD", "flatten": true}, "id": 1}
ws://localhost:9222/devtools/browser/ce75db14-2dd8-41b3-92d7-2125604f4154
{"method": "Page.enable", "id": 0, "sessionId": "F9F2C2303E47C4F042BC46B789AEF1DF"}
{"method": "Page.addScriptToEvaluateOnNewDocument", "params": {"source": "Object.defineProperty(navigator, 'deviceMemory', {get: () => 32})"}, "id": 1, "sessionId": "F9F2C2303E47C4F042BC46B789AEF1DF"}
{"method": "Page.addScriptToEvaluateOnNewDocument", "params": {"source": "Object.defineProperty(navigator, 'webdriver', {get: () => false})"}, "id": 2, "sessionId": "F9F2C2303E47C4F042BC46B789AEF1DF"}
{"method": "Page.addScriptToEvaluateOnNewDocument", "params": {"source": "Object.defineProperty(navigator, 'languages', {get: () => ['en-US', 'en','fr-FR', 'fr']})"}, "id": 3, "sessionId": "F9F2C2303E47C4F042BC46B789AEF1DF"}
{"method": "Page.addScriptToEvaluateOnNewDocument", "params": {"source": "Object.defineProperty(navigator, 'language', {get: () => ''fr-FR'})"}, "id": 4, "sessionId": "F9F2C2303E47C4F042BC46B789AEF1DF"}
{"method": "Target.setDiscoverTargets", "params": {"discover": true}, "id": 5, "sessionId": "F9F2C2303E47C4F042BC46B789AEF1DF"}
mitm targets thread started
TargetCreated(target_info=TargetInfo(target_id=TargetID('28FECF0B602368C5FDC98F1CD7AA42B3'), type_='page', title='New Tab', url='chrome://newtab/', attached=False, can_access_opener=False, opener_id=None, opener_frame_id=None, browser_context_id=BrowserContextID('ECC6C0EB1E4D82FF193AF53D9EAE8486'), subtype=None))
{"method": "Target.attachToTarget", "params": {"targetId": "28FECF0B602368C5FDC98F1CD7AA42B3", "flatten": true}, "id": 2}
{"method": "Page.enable", "id": 0, "sessionId": "D967794A83E55D16C23734D11FF69DB6"}
{"method": "Page.addScriptToEvaluateOnNewDocument", "params": {"source": "Object.defineProperty(navigator, 'deviceMemory', {get: () => 32})"}, "id": 1, "sessionId": "D967794A83E55D16C23734D11FF69DB6"}
{"method": "Page.addScriptToEvaluateOnNewDocument", "params": {"source": "Object.defineProperty(navigator, 'webdriver', {get: () => false})"}, "id": 2, "sessionId": "D967794A83E55D16C23734D11FF69DB6"}
{"method": "Page.addScriptToEvaluateOnNewDocument", "params": {"source": "Object.defineProperty(navigator, 'languages', {get: () => ['en-US', 'en','fr-FR', 'fr']})"}, "id": 3, "sessionId": "D967794A83E55D16C23734D11FF69DB6"}
{"method": "Page.addScriptToEvaluateOnNewDocument", "params": {"source": "Object.defineProperty(navigator, 'language', {get: () => ''fr-FR'})"}, "id": 4, "sessionId": "D967794A83E55D16C23734D11FF69DB6"}
TargetCreated(target_info=TargetInfo(target_id=TargetID('253AFEEF629E8CB2B201B2F78703AEE8'), type_='iframe', title='', url='', attached=False, can_access_opener=False, opener_id=None, opener_frame_id=None, browser_context_id=BrowserContextID('ECC6C0EB1E4D82FF193AF53D9EAE8486'), subtype=None))
{"method": "Target.attachToTarget", "params": {"targetId": "253AFEEF629E8CB2B201B2F78703AEE8", "flatten": true}, "id": 3}
{"method": "Page.enable", "id": 0, "sessionId": "101425CF703EC42579FC95DF071DB019"}
{"method": "Page.addScriptToEvaluateOnNewDocument", "params": {"source": "Object.defineProperty(navigator, 'deviceMemory', {get: () => 32})"}, "id": 1, "sessionId": "101425CF703EC42579FC95DF071DB019"}
{"method": "Page.addScriptToEvaluateOnNewDocument", "params": {"source": "Object.defineProperty(navigator, 'webdriver', {get: () => false})"}, "id": 2, "sessionId": "101425CF703EC42579FC95DF071DB019"}
{"method": "Page.addScriptToEvaluateOnNewDocument", "params": {"source": "Object.defineProperty(navigator, 'languages', {get: () => ['en-US', 'en','fr-FR', 'fr']})"}, "id": 3, "sessionId": "101425CF703EC42579FC95DF071DB019"}
{"method": "Page.addScriptToEvaluateOnNewDocument", "params": {"source": "Object.defineProperty(navigator, 'language', {get: () => ''fr-FR'})"}, "id": 4, "sessionId": "101425CF703EC42579FC95DF071DB019"}

附言:已修改Selenium Bidi源码,支持在启动会话时指定目标会话和命令ID。

内容的提问来源于stack exchange,提问作者PsyTrxOps

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 00:54:59