Используйте cUrl для удаленной отладки Chrome

Я пытаюсь подключиться к удаленной отладке Chrome с помощью cUrl, однако ответы от Chrome возвращают "200 OK", но нет данных.

Я настроил хром, используя:

chrome.exe --headless --remote-debugging-port=12345

Я могу успешно получить список страниц с:

>curl -i "http://localhost:12345/json"

HTTP/1.1 200 OK
Content-Length:612
Content-Type:application/json; charset=UTF-8
[ {
   "description": "",
   "devtoolsFrontendUrl": "/devtools/inspector.html?ws=localhost:12345/devtools/page/19d24d3a-25b7-4ee8-a5cf-4f3d17778575",
  ...
   "webSocketDebuggerUrl": "ws://localhost:12345/devtools/page/19d24d3a-25b7-4ee8-a5cf-4f3d17778575"
} ]

Однако я могу получить только пустой успешный ответ от URL-адресов отладчика:

>echo {"id":0,"method":"Page.navigate","params":{"url":"https://stackoverflow.com/"}}|curl -i "http://localhost:12345/devtools/page/19d24d3a-25b7-4ee8-a5cf-4f3d17778575" -H "Content-Type: application/json" -d -

HTTP/1.1 200 OK
Content-Length:0
Content-Type:text/plain

Такие команды, как Page.navigate, а также неверно сформированные запросы возвращают 200 OK, но ничего не выполняется.

Что мне не хватает ???

Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
0
1 165
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно использовать веб-сокеты для управления таким хромом. Цитата chromedevtools.github.io:

Your application can discover available pages by requesting: http://localhost:9222/json and getting a JSON object with information about inspectable pages along with the WebSocket addresses that you could use in order to start instrumenting them

Вот как это будет работать (по крайней мере, на моем Mac):

Запустите Chrome

docker pull deepsweet/chromium-headless-remote:69
docker run -it --rm -p 9222:9222 deepsweet/chromium-headless-remote:69

Получение адресов WebSocket

curl -i "http://localhost:9222/json"
HTTP/1.1 200 OK
Content-Length:361
Content-Type:application/json; charset=UTF-8

[ {
   "description": "",
   "devtoolsFrontendUrl": "/devtools/inspector.html?ws=localhost:9222/devtools/page/DC33B65CA373BE2770F2A1031C3B4CBF",
   "id": "DC33B65CA373BE2770F2A1031C3B4CBF",
   "title": "about:blank",
   "type": "page",
   "url": "about:blank",
   "webSocketDebuggerUrl": "ws://localhost:9222/devtools/page/DC33B65CA373BE2770F2A1031C3B4CBF"
} ]

Отправка вашей команды

echo '{ "id":2, "method":"Page.navigate", "params":{"url": "http://www.stackoverflow.com"} }' | websocat -t - ws://localhost:9222/devtools/page/DC33B65CA373BE2770F2A1031C3B4CBF

В примере используется веб-сайт. Вы также можете написать простой скрипт, например здесь

Убедитесь, что страница открыта

curl -i "http://localhost:9222/json"
HTTP/1.1 200 OK
Content-Length:432
Content-Type:application/json; charset=UTF-8

[ {
   "description": "",
   "devtoolsFrontendUrl": "/devtools/inspector.html?ws=localhost:9222/devtools/page/DC33B65CA373BE2770F2A1031C3B4CBF",
   "id": "DC33B65CA373BE2770F2A1031C3B4CBF",
   "title": "Stack Overflow - Where Developers Learn, Share, & Build Careers",
   "type": "page",
   "url": "https://stackoverflow.com/",
   "webSocketDebuggerUrl": "ws://localhost:9222/devtools/page/DC33B65CA373BE2770F2A1031C3B4CBF"
} ]

Ага, ты прав. Замена ws:// на http:// должна была вызвать какой-то звонок, но я этого не слышал ...

LS_ᴅᴇᴠ 19.10.2018 11:12

Другие вопросы по теме