Selenium 4.x 尝试 POST CDP:"UnsupportedCommandException"
Selenium 4.x trying to POST CDP: "UnsupportedCommandException"
我正在尝试通过 CDP 执行一些命令,但是无论 Selenium/Driver/Chrome 我使用什么组合,结果总是相同的。
上次测试:
- 硒 4.1.1
- Chrome + 驱动程序 96.0.4664.110
该项目是用 C 编写的,所以我 post 通过 CURL 手动连接到 Selenium。除了 CDP 之外的所有其他命令都可以正常工作。
我检查了 Selenium,Chrome 驱动程序;他们都内置了 CDP 支持。
我尝试 post 的 URL 是:
- /session/id/goog/cdp/execute
- /session/id/{}/cdp/execute
posted数据格式为:“cmd”+“params”(json对象)。
结果相同:org.openqa.selenium.UnsupportedCommandException.
我也尝试过 运行 Selenium 在不同的模式下,独立的,hub/node,相同的结果。
有人可以告诉我做错了什么吗?或者我误解了用法?
非常感谢
使用chromedriver可执行文件
这对我有用(Windows + Postman),但也应该与 CURL Linux/Mac.
一起使用
1 下载 chromedriver:https://chromedriver.chromium.org/downloads 适用于您的 chrome 版本。
2开始chromedriver
start chromedriver.exe
输出:
Starting ChromeDriver 97.0.4692.71 on port 9515...
3 发送请求到localhost:9515/
- 3.1 创建 Session:
POST localhost:9515/session
request json body:
{"capabilities":{"goog:chromeOptions": {}}}
status 200
response:
"value": {
"capabilities": {
...
},
"sessionId": "b8ac49ce2203739fa0d32dfe8d1a23b5"
- 3.2 导航一些 url(可选,只需检查 sessionId 工作的请求):
POST localhost:9515/session/b8ac49ce2203739fa0d32dfe8d1a23b5/url
request json body:
{"url": "https://example.com"}
status 200
- 3.3 执行CDP命令(截图):
POST localhost:9515/session/b8ac49ce2203739fa0d32dfe8d1a23b5/goog/cdp/execute
request json body:
{"cmd":"Page.captureScreenshot", "params":{}}
status 200
response:
{
"value": {
"data": "iVBORw0KGgoAAAANSUhEUgA...."
}
}
允许远程连接
默认情况下 chromedriver 只允许本地连接。
允许一些远程 IP:
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 位)
注意:Content-Type header 应该有 charset=utf-8
Content-Type:application/json;charset=utf-8
对于 Selenium Grid HTTP 请求。
先决条件
1 根据下载和运行selenium server
https://www.selenium.dev/documentation/grid/getting_started/
java -jar selenium-server-<version>.jar standalone --driver-configuration display-name='Chrome' stereotype='{"browserName":"chrome"}'
2 创建Session:
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命令(截图):
POST localhost:4444/wd/hub/session/69ac1c82306f72c7aaf53cfbb28a30e7/goog/cdp/execute
request json body:
{"cmd":"Page.captureScreenshot", "params":{}}
status 200
response:
{
"value": {
"data": "iVBORw0KGgoAAAANSUhEUgA...."
}
}
我正在尝试通过 CDP 执行一些命令,但是无论 Selenium/Driver/Chrome 我使用什么组合,结果总是相同的。
上次测试:
- 硒 4.1.1
- Chrome + 驱动程序 96.0.4664.110
该项目是用 C 编写的,所以我 post 通过 CURL 手动连接到 Selenium。除了 CDP 之外的所有其他命令都可以正常工作。
我检查了 Selenium,Chrome 驱动程序;他们都内置了 CDP 支持。
我尝试 post 的 URL 是:
- /session/id/goog/cdp/execute
- /session/id/{}/cdp/execute
posted数据格式为:“cmd”+“params”(json对象)。
结果相同:org.openqa.selenium.UnsupportedCommandException.
我也尝试过 运行 Selenium 在不同的模式下,独立的,hub/node,相同的结果。
有人可以告诉我做错了什么吗?或者我误解了用法?
非常感谢
使用chromedriver可执行文件
这对我有用(Windows + Postman),但也应该与 CURL Linux/Mac.
一起使用1 下载 chromedriver:https://chromedriver.chromium.org/downloads 适用于您的 chrome 版本。
2开始chromedriver
start chromedriver.exe
输出:
Starting ChromeDriver 97.0.4692.71 on port 9515...
3 发送请求到localhost:9515/
- 3.1 创建 Session:
POST localhost:9515/session
request json body:
{"capabilities":{"goog:chromeOptions": {}}}
status 200
response:
"value": {
"capabilities": {
...
},
"sessionId": "b8ac49ce2203739fa0d32dfe8d1a23b5"
- 3.2 导航一些 url(可选,只需检查 sessionId 工作的请求):
POST localhost:9515/session/b8ac49ce2203739fa0d32dfe8d1a23b5/url
request json body:
{"url": "https://example.com"}
status 200
- 3.3 执行CDP命令(截图):
POST localhost:9515/session/b8ac49ce2203739fa0d32dfe8d1a23b5/goog/cdp/execute
request json body:
{"cmd":"Page.captureScreenshot", "params":{}}
status 200
response:
{
"value": {
"data": "iVBORw0KGgoAAAANSUhEUgA...."
}
}
允许远程连接
默认情况下 chromedriver 只允许本地连接。
允许一些远程 IP:
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 位)
注意:Content-Type header 应该有 charset=utf-8
Content-Type:application/json;charset=utf-8
对于 Selenium Grid HTTP 请求。
先决条件
1 根据下载和运行selenium server https://www.selenium.dev/documentation/grid/getting_started/
java -jar selenium-server-<version>.jar standalone --driver-configuration display-name='Chrome' stereotype='{"browserName":"chrome"}'
2 创建Session:
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命令(截图):
POST localhost:4444/wd/hub/session/69ac1c82306f72c7aaf53cfbb28a30e7/goog/cdp/execute
request json body:
{"cmd":"Page.captureScreenshot", "params":{}}
status 200
response:
{
"value": {
"data": "iVBORw0KGgoAAAANSUhEUgA...."
}
}