Указание кукловоду подключиться к экземпляру chrome на локальном компьютере вместо версии без монитора в контейнере докера
Запустите chrome / chromium в режиме отладки, запустив /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
на терминале. Это должно дать вам URL отладки Websocket. Это должно выглядеть так: ws://host.docker.internal:9222/devtools/browser/d7db2629-0930-4741-a6ca-78ff70863c20
.
В вашей настройке docker dev, скажите docker выставить порт 9222
. Это порт отладки Chrome, который мы указали. В yml-части службы, выполняющей кукловод, выполните:
service-name:
build: "..."
volumes:
- ....
- ....
ports:
- 3010:3010
- 9222:9222 <--- Add this
А затем повторно инициализировать / перезапустить докер-контейнеры
docker-compose down
docker-compose up
- Теперь в коде изменить:
const browser = await puppeteer.launch({ args });
до
const browser = await puppeteer.connect({
browserWSEndpoint:
"ws://host.docker.internal:9222/devtools/browser/d7db2629-0930-4741-a6ca-78ff70863c20"
});
Теперь кукловод должен подключиться к Chrome на вашей локальной машине, и вы должны увидеть, как он выполняет все действия вживую! ?
PS:
или Если вы не хотите копировать сгенерированный URL снова и снова.
Вы можете сделать
const response = await axios.get(
"http://host.docker.internal:9222/json/version",
{
headers: { Host: "127.0.0.1:9222" }
}
);
const browserWSEndpoint = response.data.webSocketDebuggerUrl.replace(
/127.0.0.1/g,
"host.docker.internal"
);
const browser = await puppeteer.connect({ browserWSEndpoint });
Это может получить отладочный URL веб-сокета из chrome