我的容器化Puppeteer如何与我的主机Chrome通信?

时间:2018-07-04 14:15:51

标签: google-chrome docker puppeteer

我让Puppeteer在一个容器中工作,该容器具有自己的无头Chrome / Chromium,它将连接到在另一个容器上运行的Web应用程序。一切正常。

我希望容器中的Puppeteer使用我的主机Google Chrome(或Chromium,不要紧)来运行我的Web应用。我一直在寻找类似的东西,但是没有找到有关此事的文档。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

告诉伪造者连接到本地计算机上的chrome实例,而不是docker容器中的无头版本

  1. 通过在终端上运行\以调试模式运行chrome / chromium。这应该给您一个Websocket调试URL。看起来应该像这样:/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222

  2. 在您的docker开发设置中,告诉docker公开端口ws://host.docker.internal:9222/devtools/browser/d7db2629-0930-4741-a6ca-78ff70863c20。这是我们指定的Chrome调试端口。在运行人偶的服务的yml部分中,执行以下操作:

9222

然后重新初始化/重新启动docker容器

service-name:
  build: "..."
  volumes:
    - ....
    - ....
  ports:
    - 3010:3010
    - 9222:9222  <--- Add this
  1. 现在更改代码:
docker-compose down
docker-compose up

const browser = await puppeteer.launch({ args });

现在,操纵up的人应该连接到本地计算机上的chrome,您应该可以看到它实时执行所有操作!

PS:

或如果您不想一次又一次地复制生成的URL。 你可以做

const browser = await puppeteer.connect({
  browserWSEndpoint:
    "ws://host.docker.internal:9222/devtools/browser/d7db2629-0930-4741-a6ca-78ff70863c20"
});

这可以从chrome获取调试websocket网址

答案 1 :(得分:0)

您可以将puppeteer指向您要在puppeteer.launch方法中使用的Chrome / Chromium可执行文件:

puppeteer.launch({ executablePath : 'path/to/chromium" }); 

因此,从理论上讲,您可以将Chromium的目录从主机安装到Docker,并将伪造者指向该目录。