Доступ к протоколу Chrome Devtools в Docker Grid - PullRequest
0 голосов
/ 07 ноября 2019

Мои тесты выполняются на докерной сетке с образами селена для концентратора и хрома. Я пытаюсь получить доступ к протоколам chrome devtools в узле chrome, чтобы я мог получить доступ к / перехватить запрос. Любая помощь приветствуется

Мне удалось заставить ее работать без докера в моем локальном компьютере. Но не смог придумать, как подключить devtools в chrome узле Docker Grid. Ниже приведен мой docker-compose и код

docker compose

version: "3.7"
services:
  selenium_hub_ix:
    container_name: selenium_hub_ix
    image: selenium/hub:latest
    environment:
      SE_OPTS: "-port 4445"
    ports:
      - 4445:4445
  chrome_ix:
    image: selenium/node-chrome-debug:latest
    container_name: chrome_node_ix
    depends_on:
      - selenium_hub_ix
    ports:
      - 5905:5900
      - 5903:5555
      - 9222:9222
    environment:
      - no_proxy=localhost
      - HUB_PORT_4444_TCP_ADDR=selenium_hub_ix
      - HUB_PORT_4444_TCP_PORT=4445
      - NODE_MAX_INSTANCES=5
      - NODE_MAX_SESSION=5
      - TZ=America/Chicago
    volumes:
      - /dev/shm:/dev/shm

Вот пример кода, как я его получил, работая локально без сетки (драйвер chrome в моем mac)

const CDP = require('chrome-remote-interface');
let webDriver = require("selenium-webdriver");
module.exports = {
async openBrowser() {
this.driver = await new webDriver.Builder().forBrowser("chrome").build();
            let session = await this.driver.session_
            let debuggerAddress = await session.caps_.map_.get("goog:chromeOptions").debuggerAddress;
            let AddressString = debuggerAddress.split(":");
            console.log(AddressString)
            try {
                const protocol = await CDP({
                    port: AddressString[1]
                });

            } catch (err) {
                console.log(err.message)

                const {

                    Network,
                    Fetch
                } = protocol;

                await Fetch.enable({
                    patterns: [{
                        urlPattern: "*",
                    }]
                });

            }
            await Fetch.requestPaused(async ({
                interceptionId,
                request
            }) => {
                console.log(request)

            })
        }
        return this.driver;
    },
}

Когда это сетка, я просто изменяю способ сборки драйвера на ниже

 this.driver = await new webDriver.Builder().usingServer(process.env.SELENIUM_HUB_IP).withCapabilities(webDriver.Capabilities.chrome()).build();

При этом я получаю номер порта, но не могу создать сеанс CDP, и я получаю ошибку об отказе в соединении.

...