Bijan
Bijan

Reputation: 8602

Connect to undetected-chromedriver docker image

I have been using https://hub.docker.com/r/selenium/standalone-chrome on my Synology NAS to use Selenium Webdriver to perform automated requests.

I don't remember the command I ran but I started the container and run driver = webdriver.Remote("http://127.0.0.1:4444/wd/hub") in Python to connect to the selenium chrome image.

However I have a use case that requires me to use undetected-chromedriver. How do I install something like https://hub.docker.com/r/bruvv/undetected_chromedriver and connect to it from my NAS' python terminal?

Upvotes: 2

Views: 4590

Answers (1)

ultrafunkamsterdam
ultrafunkamsterdam

Reputation: 118

Beware, everyone can publish on docker hub and so there are numerous undetected-chromedriver's. So what you are trying to install is someone else's (failed) attempt.

official: https://hub.docker.com/r/ultrafunk/undetected-chromedriver

as per @nnhthuan 's comment, some more detail.

undetected-chromedriver will start the Chrome binary, but will do it from python instead of letting the chromedriver binary run Chrome. As undetected-chromedriver does not officially support headless mode, you'll need a way to run "windowed" chrome on docker. To make this happen, you could use Xvfb to emulate a X-server desktop. If you forget this step, you won't be able to connect to chrome as chrome closes itself down (no screens found) even before undetected-chromedriver is able to connect, and so it crashes.

To ensure xvfb keeps running, you could use for example something like this in your entrypoint:

#!/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 "$@"

once your image is running stable, you could set your chromedriver debug_host to your internal ip address instead of 127.0.0.1, and debug_port to a static value. This would enable connections from remote hosts. Don't forget to forward them in docker.

Upvotes: 6

Related Questions