【问题标题】:RSelenium using Docker and Firefox, Browser Not Opening on MacRSelenium 使用 Docker 和 Firefox,Mac 上无法打开浏览器
【发布时间】:2018-03-14 23:09:02
【问题描述】:

我正在尝试将 RSelenium 与 Docker 一起使用,一切似乎都在工作,除了我看不到 firefox 浏览器。我认为我的代码中没有任何内容要求它是无头的,但必须如此。有没有办法让它像使用 RSelenium::startServer() 时一样可见?

我按照本文中的说明安装了 docker,https://www.raynergobran.com/2017/01/rselenium-mac-update/

我去终端输入:docker run -d -p 4445:4444 selenium/standalone-firefox 没有问题。

我转到 R 并运行此代码:

library(RSelenium)
remDr <- remoteDriver(port=4445L, browserName = "firefox")
remDr$open()
remDr$getStatus()
remDr$navigate("https://www.google.com/")
remDr$getCurrentUrl()

最后一条命令的输出如预期:

[[1]]
[1] "https://www.google.com/"

查看remDr$open()之后的输出时,headless设置为false:

[1] "Connecting to remote server"
$`moz:profile`
[1] "/tmp/rust_mozprofile.EQnMfPLPKS4l"

$rotatable
[1] FALSE

$timeouts
$timeouts$implicit
[1] 0

$timeouts$pageLoad
[1] 300000

$timeouts$script
[1] 30000


$pageLoadStrategy
[1] "normal"

$`moz:headless`
[1] FALSE

$`moz:accessibilityChecks`
[1] FALSE

$acceptInsecureCerts
[1] FALSE

$browserVersion
[1] "58.0.2"

$platformVersion
[1] "4.9.60-linuxkit-aufs"

$`moz:processID`
[1] 741

$browserName
[1] "firefox"

$platformName
[1] "linux"

$`moz:webdriverClick`
[1] TRUE

$webdriver.remote.sessionid
[1] "bfa2d87a-67d3-4e5e-838b-e6894a90dd5c"

$id
[1] "bfa2d87a-67d3-4e5e-838b-e6894a90dd5c"

同样,浏览器在我的屏幕上不可见,但我希望它可以。

我正在运行 El Capitan 10.11.6。

感谢您的帮助。

【问题讨论】:

  • 嗨,冯,我试过了,但没有运气。我收到了这个错误,httr 调用中的未定义错误。 httr 输出:已达到超时:连接在 10004 毫秒后超时。我通过在终端中运行“docker inspect 7ccf58a3e085”获得了我的 Mac 上的 IP 地址。 7cc... 是容器 ID。更多信息在这里:superuser.com/a/1080158/883513
  • 还有 docker.for.mac.host.internal?如stackoverflow.com/a/49149448/6309
  • 嗨,冯,我没有成功运行这一行,“remoteDriver(remoteServerAddr = "docker.for.mac.host.internal", port=4445L, browserName = "firefox")" 我没看到另一个可以接受 docker.for 的字段...我在语法上遗漏了什么吗?收到的错误是:“checkError(res) 中的错误:httr 调用中的未定义错误。httr 输出:无法解析主机:docker.for.mac.host.internal”谢谢。
  • 那么也许github.com/SeleniumHQ/docker-selenium/issues/511可以提供一些线索。

标签: docker rselenium


【解决方案1】:

我认为问题似乎与您对浏览器的期望有关。您正在 docker 容器内启动浏览器。 docker 容器没有 UI,浏览器是在容器实例中启动的,而不是在启动调用的机器上

默认的selenium/standalone-firefox 不允许浏览器查看。如果您需要查看浏览器,则需要使用selenium/standalone-firefox-debug 图像。此映像在容器的端口 5900 托管 VNC。您将使用以下方式运行它

docker run -d -p 4445:4444 -p 5900:5900 selenium/standalone-firefox-debug

然后您将执行您的代码并使用 VNC 查看器连接到127.0.0.1:5900。它会要求输入默认密码secret

然后你会在那个 VNC 中看到浏览器

以上是运行你有问题的代码的结果

【讨论】:

    【解决方案2】:

    这是一个可能对你有用的 Dockerfile https://github.com/jessfraz/dockerfiles/blob/master/chrome/stable/Dockerfile

    为方便起见,在此处内联:

    # Run Chrome in a container
    #
    # docker run -it \
    #   --net host \ # may as well YOLO
    #   --cpuset-cpus 0 \ # control the cpu
    #   --memory 512mb \ # max memory it can use
    #   -v /tmp/.X11-unix:/tmp/.X11-unix \ # mount the X11 socket
    #   -e DISPLAY=unix$DISPLAY \
    #   -v $HOME/Downloads:/home/chrome/Downloads \
    #   -v $HOME/.config/google-chrome/:/data \ # if you want to save state
    #   --security-opt seccomp=$HOME/chrome.json \
    #   --device /dev/snd \ # so we have sound
    #   --device /dev/dri \
    #   -v /dev/shm:/dev/shm \
    #   --name chrome \
    #   jess/chrome
    #
    # You will want the custom seccomp profile:
    #   wget https://raw.githubusercontent.com/jfrazelle/dotfiles/master/etc/docker/seccomp/chrome.json -O ~/chrome.json
    
    # Base docker image
    FROM debian:sid
    LABEL maintainer "Jessie Frazelle <jess@linux.com>"
    
    ADD https://dl.google.com/linux/direct/google-talkplugin_current_amd64.deb /src/google-talkplugin_current_amd64.deb
    
    # Install Chrome
    RUN apt-get update && apt-get install -y \
        libcanberra-gtk* \
        apt-transport-https \
        ca-certificates \
        curl \
        gnupg \
        hicolor-icon-theme \
        libgl1-mesa-dri \
        libgl1-mesa-glx \
        libpango1.0-0 \
        libpulse0 \
        libv4l-0 \
        fonts-symbola \
        --no-install-recommends \
        && curl -sSL https://dl.google.com/linux/linux_signing_key.pub | apt-key add - \
        && echo "deb [arch=amd64] https://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google.list \
        && apt-get update && apt-get install -y \
        google-chrome-stable \
        --no-install-recommends \
        && dpkg -i '/src/google-talkplugin_current_amd64.deb' \
        && apt-get purge --auto-remove -y curl \
        && rm -rf /var/lib/apt/lists/* \
        && rm -rf /src/*.deb
    
    # Add chrome user
    RUN groupadd -r chrome && useradd -r -g chrome -G audio,video chrome \
        && mkdir -p /home/chrome/Downloads && chown -R chrome:chrome /home/chrome
    
    COPY local.conf /etc/fonts/local.conf
    
    # Run Chrome as non privileged user
    USER chrome
    
    # Autorun chrome
    ENTRYPOINT [ "google-chrome" ]
    CMD [ "--user-data-dir=/data" ]
    

    另外,这个项目https://github.com/sameersbn/docker-browser-box

    为方便起见,内嵌了 Dockerfile。

    FROM sameersbn/ubuntu:14.04.20170123
    
    ENV TOR_VERSION=6.5 \
        TOR_FINGERPRINT=0x4E2C6E8793298290
    
    RUN wget -q -O - "https://dl-ssl.google.com/linux/linux_signing_key.pub" | sudo apt-key add - \
     && echo "deb http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list \
     && mkdir ~/.gnupg \
     && gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys ${TOR_FINGERPRINT} \
     && gpg --fingerprint ${TOR_FINGERPRINT} | grep -q "Key fingerprint = EF6E 286D DA85 EA2A 4BA7  DE68 4E2C 6E87 9329 8290" \
     && apt-get update \
     && DEBIAN_FRONTEND=noninteractive apt-get install -y xz-utils file locales dbus-x11 pulseaudio dmz-cursor-theme curl \
          fonts-dejavu fonts-liberation hicolor-icon-theme \
          libcanberra-gtk3-0 libcanberra-gtk-module libcanberra-gtk3-module \
          libasound2 libglib2.0 libgtk2.0-0 libdbus-glib-1-2 libxt6 libexif12 \
          libgl1-mesa-glx libgl1-mesa-dri libstdc++6 nvidia-346 \
          gstreamer-1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good \
          gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav \
          google-chrome-stable chromium-browser firefox \
     && update-locale LANG=C.UTF-8 LC_MESSAGES=POSIX \
     && mkdir -p /usr/lib/tor-browser \
     && wget -O /tmp/tor-browser-linux64-${TOR_VERSION}_en-US.tar.xz  https://www.torproject.org/dist/torbrowser/${TOR_VERSION}/tor-browser-linux64-${TOR_VERSION}_en-US.tar.xz \
     && wget -O /tmp/tor-browser-linux64-${TOR_VERSION}_en-US.tar.xz.asc https://www.torproject.org/dist/torbrowser/${TOR_VERSION}/tor-browser-linux64-${TOR_VERSION}_en-US.tar.xz.asc \
     && gpg /tmp/tor-browser-linux64-${TOR_VERSION}_en-US.tar.xz.asc \
     && tar -Jvxf /tmp/tor-browser-linux64-${TOR_VERSION}_en-US.tar.xz --strip=1 -C /usr/lib/tor-browser \
     && ln -sf /usr/lib/tor-browser/Browser/start-tor-browser /usr/bin/tor-browser \
     && rm -rf /tmp/tor-browser-linux64-${TOR_VERSION}_en-US.tar.xz \
     && rm -rf ~/.gnupg \
     && rm -rf /var/lib/apt/lists/*
    
    COPY scripts/ /var/cache/browser-box/
    COPY entrypoint.sh /sbin/entrypoint.sh
    COPY confs/local.conf /etc/fonts/local.conf
    RUN chmod 755 /sbin/entrypoint.sh
    
    ENTRYPOINT ["/sbin/entrypoint.sh"]
    

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
    • 请解释否决票,这个答案与提出的问题完全相关。
    • 对你投反对票的用户早已不在,你误以为是我。
    • 对不起@ThomasSmyth,如果这是暗示的话,我实际上不认为是你,因为你很好地教育了我。我只是不确定在哪里可以询问原因。再次感谢。干杯
    • 我也没有拒绝你,但很受诱惑。原因:只是复制粘贴一堆代码而不解决 OP 的具体问题是没有用的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 2022-08-21
    • 2016-02-06
    • 1970-01-01
    • 2016-10-12
    • 2017-06-25
    相关资源
    最近更新 更多