Home > database >  Why can't I connect to Chrome when using the undetected chromedriver?
Why can't I connect to Chrome when using the undetected chromedriver?

Time:09-27

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:52403\nfrom 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!

CodePudding user response:

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.

CodePudding user response:

I think this solves the issue:

import logging
logging.basicConfig(level=logging.NOTSET)
import undetected_chromedriver.v2 as uc
import time
options = uc.ChromeOptions()
options.debugger_address="127.0.0.1:42333"

driver = uc.Chrome(options=options, version_main=89)
driver.get('https://www.google.com/')
time.sleep(777)

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...

  • Related