我让Puppeteer在一个容器中工作,该容器具有自己的无头Chrome / Chromium,它将连接到在另一个容器上运行的Web应用程序。一切正常。
我希望容器中的Puppeteer使用我的主机Google Chrome(或Chromium,不要紧)来运行我的Web应用。我一直在寻找类似的东西,但是没有找到有关此事的文档。
我该怎么做?
答案 0 :(得分:1)
告诉伪造者连接到本地计算机上的chrome实例,而不是docker容器中的无头版本
通过在终端上运行\
以调试模式运行chrome / chromium。这应该给您一个Websocket调试URL。看起来应该像这样:/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
。
在您的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
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,并将伪造者指向该目录。