首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Selenium 4.x试图发布CDP:"UnsupportedCommandException“

Selenium 4.x试图发布CDP:"UnsupportedCommandException“
EN

Stack Overflow用户
提问于 2022-01-10 15:32:08
回答 1查看 812关注 0票数 0

我试图通过CDP执行一些命令,但是无论我使用Selenium/Driver/Chrome的什么组合,结果总是一样的。

最后一次测试是:

  • Selenium 4.1.1
  • Chrome +驱动器96.0.4664.110

这个项目是用C制作的,所以我是通过CURL手动发布到Selenium的。除了CDP之外,其他所有命令都能正常工作。

我已经检查过Selenium,Chrome驱动程序;它们都内置了CDP支持。

我试图发布的URL是:

代码语言:javascript
复制
- /session/id/goog/cdp/execute
- /session/id/{}/cdp/execute

发布的数据格式是:"cmd“+ "params”(json对象)。

两个结果都是相同的: org.openqa.selenium.UnsupportedCommandException.

我还尝试在不同的模式下运行Selenium,独立运行,中心/节点,相同的结果。

有人能告诉我我做错了什么吗?或者我误解了这个用法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-10 19:35:19

使用色驱动程序可执行文件

这对我有用(Windows +邮递员),但也应该与CURL /Mac.一起工作。

1下载铬驱动器:为您的铬版本。

2启动色度驱动器

代码语言:javascript
复制
start chromedriver.exe

产出:

代码语言:javascript
复制
Starting ChromeDriver 97.0.4692.71 on port 9515...

3向本地主机发送请求:9515/

  • 3.1创建会话:

代码语言:javascript
复制
POST localhost:9515/session

request json body:
{"capabilities":{"goog:chromeOptions": {}}}

status 200

response:
 "value": {
        "capabilities": {
            ...
        },
        "sessionId": "b8ac49ce2203739fa0d32dfe8d1a23b5"

  • 3.2导航一些url (可选,只需检查sessionId works的请求):

代码语言:javascript
复制
POST localhost:9515/session/b8ac49ce2203739fa0d32dfe8d1a23b5/url

request json body:
{"url": "https://example.com"}

status 200

执行CDP命令(以screenshot):为例)

代码语言:javascript
复制
POST localhost:9515/session/b8ac49ce2203739fa0d32dfe8d1a23b5/goog/cdp/execute

request json body:
{"cmd":"Page.captureScreenshot", "params":{}}

status 200

response:
{
    "value": {
        "data": "iVBORw0KGgoAAAANSUhEUgA...."
    }
}

允许远程连接

默认情况下,chromedriver只允许本地连接。

为了允许一些远程IP:

代码语言:javascript
复制
start chromedriver.exe --allowed-ips="some-remote-ip"

参考资料:https://sites.google.com/a/chromium.org/chromedriver/security-considerations

使用Selenium Grid运行CDP命令

最后,它开始对我起作用

  • ChromeDriver 97.0.4692.71
  • selenium-server-4.1.1
  • Chrome 97.0.4692.71 (正式建造)(64位)

注意:对于Selenium请求,内容类型标头应该有charset=utf-8 Content-Type:application/json;charset=utf-8

先决条件

1根据https://www.selenium.dev/documentation/grid/getting_started/下载并运行selenium服务器

代码语言:javascript
复制
java -jar selenium-server-<version>.jar standalone --driver-configuration display-name='Chrome' stereotype='{"browserName":"chrome"}'

2创建会话:

代码语言:javascript
复制
POST localhost:4444/wd/hub/session

request json body:
{
  "desiredCapabilities": {
    "browserName": "chrome",
    "goog:chromeOptions": {
      "args": [
      ],
      "extensions": [
      ]
    }
  },
  "capabilities": {
    "firstMatch": [
      {
        "browserName": "chrome",
        "goog:chromeOptions": {
          "args": [
          ],
          "extensions": [
          ]
        }
      }
    ]
  }
}

status 200

response:
{
    "status": 0,
    "sessionId": "69ac1c82306f72c7aaf53cfbb28a30e7",
    ...
    }
}

3执行CDP命令(截图):

代码语言:javascript
复制
POST localhost:4444/wd/hub/session/69ac1c82306f72c7aaf53cfbb28a30e7/goog/cdp/execute

request json body:
{"cmd":"Page.captureScreenshot", "params":{}}

status 200

response:
{
    "value": {
        "data": "iVBORw0KGgoAAAANSUhEUgA...."
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70654898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档