I am running a python script inside a docker container running https://hub.docker.com/r/dorowu/ubuntu-desktop-lxde-vnc/.
The python script can be found below:
import logging
logging.basicConfig(level=logging.NOTSET)
import undetected_chromedriver.v2 as uc
import time
driver = uc.Chrome()
driver.get('https://www.google.com/')
time.sleep(777)
The output of the logs can be found below:
DEBUG:undetected_chromedriver.patcher:getting release number from /LATEST_RELEASE
DEBUG:undetected_chromedriver.patcher:downloading from https://chromedriver.storage.googleapis.com/105.0.5195.52/chromedriver_linux64.zip
DEBUG:undetected_chromedriver.patcher:unzipping /tmp/tmpo6txm7dt
INFO:undetected_chromedriver.patcher:patching driver executable /root/.local/share/undetected_chromedriver/f628cdd8dcd9c5f0_chromedriver
DEBUG:uc:created a temporary folder in which the user-data (profile) will be stored during this
session, and added it to chrome startup arguments: --user-data-dir=/tmp/tmp5ctkku_n
DEBUG:uc:did not find a bad exit_type flag
DEBUG:selenium.webdriver.remote.remote_connection:POST http://localhost:48393/session {"capabilities": {"firstMatch": [{}], "alwaysMatch": {"browserName": "chrome", "pageLoadStrategy": "normal", "goog:chromeOptions": {"extensions": [], "binary": "/usr/bin/google-chrome", "args": ["--remote-debugging-host=127.0.0.1", "--remote-debugging-port=52403", "--user-data-dir=/tmp/tmp5ctkku_n", "--lang=en-US", "--no-default-browser-check", "--no-first-run", "--log-level=0"], "debuggerAddress": "127.0.0.1:52403"}}}}
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): localhost:48393
DEBUG:urllib3.connectionpool:http://localhost:48393 "POST /session HTTP/1.1" 500 769
DEBUG:selenium.webdriver.remote.remote_connection:Remote response: status=500 | data={"value":{"error":"unknown error","message":"unknown error: cannot connect to chrome at 127.0.0.1:52403nfrom chrome not reachable","stacktrace":"#0 0x55ca526ee693 u003Cunknown>n#1 0x55ca524e79db u003Cunknown>n#2 0x55ca524d781e u003Cunknown>n#3 0x55ca52510677 u003Cunknown>n#4 0x55ca52507e9f u003Cunknown>n#5 0x55ca52543953 u003Cunknown>n#6 0x55ca5253d743 u003Cunknown>n#7 0x55ca52513533 u003Cunknown>n#8 0x55ca52514715 u003Cunknown>n#9 0x55ca5273e7bd u003Cunknown>n#10 0x55ca52741bf9 u003Cunknown>n#11 0x55ca52723f2e u003Cunknown>n#12 0x55ca527429b3 u003Cunknown>n#13 0x55ca52717e4f u003Cunknown>n#14 0x55ca52761ea8 u003Cunknown>n#15 0x55ca52762052 u003Cunknown>n#16 0x55ca5277c71f u003Cunknown>n#17 0x7f2846a68609 u003Cunknown>n"}} | headers=HTTPHeaderDict({'Content-Length': '769', 'Content-Type': 'application/json; charset=utf-8', 'cache-control': 'no-cache'})
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
DEBUG:uc:closing webdriver
DEBUG:uc:killing browser
DEBUG:uc:successfully removed /tmp/tmp5ctkku_n
Traceback (most recent call last):
File "test.py", line 5, in <module>
driver = uc.Chrome()
File "/usr/local/lib/python3.8/dist-packages/undetected_chromedriver/__init__.py", line 401, in __init__
super(Chrome, self).__init__(
File "/usr/local/lib/python3.8/dist-packages/selenium/webdriver/chrome/webdriver.py", line 69, in __init__
super().__init__(DesiredCapabilities.CHROME['browserName'], "goog",
File "/usr/local/lib/python3.8/dist-packages/selenium/webdriver/chromium/webdriver.py", line 92, in __init__
super().__init__(
File "/usr/local/lib/python3.8/dist-packages/selenium/webdriver/remote/webdriver.py", line 270, in __init__
self.start_session(capabilities, browser_profile)
File "/usr/local/lib/python3.8/dist-packages/undetected_chromedriver/__init__.py", line 589, in start_session
super(selenium.webdriver.chrome.webdriver.WebDriver, self).start_session(
File "/usr/local/lib/python3.8/dist-packages/selenium/webdriver/remote/webdriver.py", line 363, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "/usr/local/lib/python3.8/dist-packages/selenium/webdriver/remote/webdriver.py", line 428, in execute
self.error_handler.check_response(response)
File "/usr/local/lib/python3.8/dist-packages/selenium/webdriver/remote/errorhandler.py", line 243, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: cannot connect to chrome at 127.0.0.1:52403
from chrome not reachable
Stacktrace:
#0 0x55ca526ee693 <unknown>
#1 0x55ca524e79db <unknown>
#2 0x55ca524d781e <unknown>
#3 0x55ca52510677 <unknown>
#4 0x55ca52507e9f <unknown>
#5 0x55ca52543953 <unknown>
#6 0x55ca5253d743 <unknown>
#7 0x55ca52513533 <unknown>
#8 0x55ca52514715 <unknown>
#9 0x55ca5273e7bd <unknown>
#10 0x55ca52741bf9 <unknown>
#11 0x55ca52723f2e <unknown>
#12 0x55ca527429b3 <unknown>
#13 0x55ca52717e4f <unknown>
#14 0x55ca52761ea8 <unknown>
#15 0x55ca52762052 <unknown>
#16 0x55ca5277c71f <unknown>
#17 0x7f2846a68609 <unknown>
DEBUG:undetected_chromedriver.dprocess:cleaning up pid 2685
DEBUG:undetected_chromedriver.patcher:successfully unlinked /root/.local/share/undetected_chromedriver/f628cdd8dcd9c5f0_chromedriver
DEBUG:uc:closing webdriver
DEBUG:uc:killing browser
As you can see, it downloads a new version "105.0.5195.52", I know this version has to match the version of the chrome browser on the device. This can be seen below:
root@5e90a4da40db:~# /usr/bin/google-chrome --version
Google Chrome 105.0.5195.125
I am pretty lost, if anyone has an idea on how to fix this, please let me know!
2
Answers
I think this solves the issue:
disclaimer: I don’t know either python or selenium so for me it works because the logs say http requests return 200 instead of 500. The
debugger_address
comes from looking at the source code at https://github.com/ultrafunkamsterdam/undetected-chromedriver and noticing there is an issue on how the debugger host and port are set. The value 42333 is random. Version_main=89 is to fix an incompatibility issue. Remove it and you will see it. Maybe there are better ways to fix it…There’s a solution posted for this on the GitHub ticket: https://github.com/ultrafunkamsterdam/undetected-chromedriver/issues/743#issuecomment-1249283856
First, you’ll need an Xvfb virtual display on that Linux machine so that you avoid using headless mode. More info here: https://stackoverflow.com/a/36608933/7058266
Second, you’ll probably need
--no-sandbox
as a Chromium option to avoid errors on Linux.That should cover things. To simplify this process, you might be able to use an existing Selenium Python framework, https://github.com/seleniumbase/SeleniumBase, which already gives you the settings that you need based on the operating system that you’re using.
SeleniumBase includes the
pytest
options:--xvfb
and--uc
for automatically using Xvfb mode, and undetected-chromedriver mode as options. And it includes updates to the undetected-chromedriver library, which hasn’t been updated in over 6 months at the time of this post.