gpt4 book ai didi

docker - 在 Docker 容器中从 Chrome-Headless 请求 webSocketDebuggerUrl

转载 作者:行者123 更新时间:2023-12-02 18:20:51 31 4
gpt4 key购买 nike

设置

尝试在我的 docker-compose 中将 chrome headless 作为容器运行(图片:https://hub.docker.com/r/alpeware/chrome-headless-trunk)并从另一个容器连接到它。

问题

要实际连接到容器内的 chrome,我首先需要检索 webSocketDebuggerUrl,它位于 http://0.0.0.0:9222/json/version。 chrome-headless.

问题是:我对这条路径的请求总是失败

RequestError: Error: connect ECONNREFUSED 0.0.0.0:9222

并且无法让 webSocketDebuggerUrl 连接到 chrome。

更多信息

另外,如果我访问 http://0.0.0.0:9222/json/version在我自己的浏览器中,复制 url 并将其硬编码到我的 puppeteer.connect() 中,如果我将“0.0.0.0”的地址替换为我的(链接的)容器名称(在 docker-compose 中指定),它只能按预期工作): http://chrome:9222/json/version

如果我在使用容器名称地址 ( http://chrome:9222/json/version ) 时尝试从/json/version 请求 webSocketDebuggerUrl,我会收到错误

StatusCodeError: 500 - "Host header is specified and is not an IP address or localhost."

我的代码(抽象)

const rp = require('request-promise')
const puppeteer = require('puppeteer-core')

let url = await rp({uri:'http://0.0.0.0:9222/json/version', json: true }).then(res => res.webSocketDebuggerUrl)
let browser = await puppeteer.connect({ browserWSEndpoint: url })

最佳答案

好吧,因为来自 500 的错误消息说“主机已指定”,我只是将该 header 设置为空,现在我可以成功请求 webSocketDebuggerUrl。

这个解决方案感觉有点老套,所以如果有人对如何改进它有建议,我会很高兴:

const puppeteer = require('puppeteer-core')
const rp = require('request-promise')

let websocket = await rp({uri:'http://chrome:9222/json/version', json: true, headers: {'Host': ''} })
.then(res => res.webSocketDebuggerUrl.replace('ws://','ws://chrome:9222'))
let browser = await puppeteer.connect({ browserWSEndpoint: websocket })

关于docker - 在 Docker 容器中从 Chrome-Headless 请求 webSocketDebuggerUrl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53867751/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com