带有远程网络驱动程序的 CDP。“WebDriver”对象没有属性“execute_cdp_cmd”python

Dan*_*rin 7 python selenium google-chrome-devtools selenium-chromedriver selenoid

我正在尝试使用 CDP 运行测试,

webdriver.execute_cdp_cmd('Network.enable', {}) 
Run Code Online (Sandbox Code Playgroud)

使用远程网络驱动程序(在 Selenoid 中)。但出现此错误:

AttributeError:“WebDriver”对象没有属性“execute_cdp_cmd”。在本地环境下效果很好。我尝试使用 Selenium 3.141.0 和 4.1.3。

我熟悉 PyCDP 文档(https://py-cdp.readthedocs.io/en/latest/getting_started.html),但我不知道如何正确使用它。

为什么它不能与远程网络驱动程序一起使用?有人有在 Selenium 4 中使用 python 执行 CDP 命令的示例吗?

我使用以下功能:

功能= {'loggingPrefs':{'浏览器':'全部'},'goog:loggingPrefs':{'性能':'全部'},“browserName”:“chrome”,“browserVersion”:“99.0”,“ selenoid:options": { "enableVNC": True, "enableVideo": False } }

if request.config.getoption('--remote'): driver = webdriver.Remote(command_executor='selenoid.dev:4444/wd/hub',desired_capability=功能, options=选项)

Ham*_*mad 6

远程 Web 驱动程序似乎不支持 CDP。

找到了这个问题的甜蜜解决方法:

import json

def send(driver, cmd, params={}):
  resource = "/session/%s/chromium/send_command_and_get_result" % driver.session_id
  url = driver.command_executor._url + resource
  body = json.dumps({'cmd': cmd, 'params': params})
  response = driver.command_executor._request('POST', url, body)
  return response.get('value')

send(webdriver, 'Network.enable', {})
Run Code Online (Sandbox Code Playgroud)

来源和相关讨论:https://github.com/SeleniumHQ/selenium/issues/8672