连接到未检测到的 chromedriver docker 映像

Bij*_*jan 2 python selenium python-3.x docker undetected-chromedriver

我一直在 Synology NAS 上使用https://hub.docker.com/r/selenium/standalone-chrome,以使用 Selenium Webdriver 执行自动请求。

我不记得我运行的命令,但我启动了容器并driver = webdriver.Remote("http://127.0.0.1:4444/wd/hub")在 Python 中运行以连接到 selenium chrome 图像。

但是我有一个用例需要我使用unDetected-chromedriver。如何安装https://hub.docker.com/r/bruvv/undetected_chromedriver之类的东西并从 NAS 的 python 终端连接到它?

ult*_*dam 6

请注意,每个人都可以在 docker hub 上发布,因此存在大量未检测到的 chromedriver。因此,您尝试安装的是其他人的(失败的)尝试。

官方: https: //hub.docker.com/r/ultrafunk/unDetected-chromedriver

根据 @nnhthuan 的评论,更多细节。

unDetected-chromedriver 将启动 Chrome 二进制文件,但会从 python 执行此操作,而不是让 chromedriver 二进制文件运行 Chrome。由于 unDetected-chromedriver 并不正式支持无头模式,因此您需要一种在 docker 上运行“窗口化”chrome 的方法。为了实现这一点,您可以使用 Xvfb 来模拟 X 服务器桌面。如果您忘记了这一步,您将无法连接到 chrome,因为 chrome 会在 unDetected-chromedriver 能够连接之前自行关闭(找不到屏幕),因此会崩溃。

为了确保 xvfb 继续运行,您可以在入口点中使用类似的内容:

#!/bin/bash

export DISPLAY=:1
function keepUpScreen() {
  echo "running keepUpScreen()"
  while true; do
        sleep .25
        if [ -z $(pidof Xvfb) ]; then
                Xvfb $DISPLAY -screen $DISPLAY 1280x1024x16 &
        fi;
  done;
}


keepUpScreen &
echo "running: ${@}"
exec "$@"
Run Code Online (Sandbox Code Playgroud)

一旦您的映像运行稳定,您可以将 chromedriver debug_host 设置为您的内部 IP 地址而不是 127.0.0.1,并将 debug_port 设置为静态值。这将启用来自远程主机的连接。不要忘记在 docker 中转发它们。