Forums

Cannot run selenium code: selenium.common.exceptions.WebDriverException: Message: unknown error: cannot connect to chrome at

Hello, please help, i got this error when i try to run my code:

Traceback (most recent call last):
  File "/home/keysoryu/online_users/online_web.py", line 21, in <module>
    driver = uc.Chrome()
  File "/home/keysoryu/.local/lib/python3.10/site-packages/undetected_chromedriver/__init__.py", line 431, in __init__
    super(Chrome, self).__init__(
  File "/usr/local/lib/python3.10/site-packages/selenium/webdriver/chrome/webdriver.py", line 70, in __init__
    super(WebDriver, self).__init__(DesiredCapabilities.CHROME['browserName'], "goog",
  File "/usr/local/lib/python3.10/site-packages/selenium/webdriver/chromium/webdriver.py", line 92, in __init__
    RemoteWebDriver.__init__(
  File "/usr/local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 275, in __init__
    self.start_session(capabilities, browser_profile)
  File "/home/keysoryu/.local/lib/python3.10/site-packages/undetected_chromedriver/__init__.py", line 694, in start_session
    super(selenium.webdriver.chrome.webdriver.WebDriver, self).start_session(
  File "/usr/local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 365, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/usr/local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 430, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python3.10/site-packages/selenium/webdriver/remote/errorhandler.py", line 247, 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:37355
from chrome not reachable
Stacktrace:
#0 0x559786bb5303 <unknown>
#1 0x559786989bbd <unknown>
#2 0x5597869785ab <unknown>
#3 0x5597869b63c3 <unknown>
#4 0x5597869adae9 <unknown>
#5 0x5597869ef4a6 <unknown>
#6 0x5597869e6753 <unknown>
#7 0x5597869b9a14 <unknown>
#8 0x5597869bab7e <unknown>
#9 0x559786c0432e <unknown>
#10 0x559786c07c0e <unknown>
#11 0x559786bea610 <unknown>
#12 0x559786c08c23 <unknown>

This is code (it creates a list of urls, login into the website, then goes to the links via chrome, check if users are online and finally sends an email with the online users):

from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.action_chains import ActionChains
import undetected_chromedriver as uc
from undetected_chromedriver import Chrome

# create a new Chrome browser instance
options = webdriver.ChromeOptions()
options.add_argument("--disable-notifications")
options.add_argument("--disable-extensions")
options.add_argument("--disable-infobars")
options.add_argument("--start-maximized")
options.add_argument("--headless")
options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36")
#Anterior--driver = webdriver.Chrome(chrome_options=options)
driver = uc.Chrome()
driver.delete_all_cookies()

while True:
    users = [
    {"username": "Chris", "url": "url1"},
    {"username": "Dean", "url": "url2"},
    {"username": "Jim", "url": "urln"},
    ]

     #login in web
    driver.get("weblink")
    # Wait until the google login button is visible
    time.sleep(10)
    # Find the google login button
    google_login_button = driver.find_element(By.ID,"surface1")

    # Move the mouse to the google login button
    actions = ActionChains(driver)
    actions.move_to_element(google_login_button)
    actions.click(google_login_button)
    actions.perform()
    time.sleep(20)
    driver.switch_to.window(driver.window_handles[1])
   #type credentials
    email_field = driver.find_element(By.ID,"identifierId")
    email_field.send_keys("mail@gmail.com")

    # simulate mouse click on the button
    email_field.send_keys(Keys.ENTER)

    time.sleep(3)

    #write password in next window
    focused_elem = driver.switch_to.active_element
    focused_elem.send_keys("pass")
    focused_elem.send_keys(Keys.ENTER)

    time.sleep(15)
    driver.switch_to.window(driver.window_handles[0])

    usernames = []
    for user in users:
        # navigate to the webpage
        driver.get(user["url"])
        time.sleep(5)

        # check if the text "En línea" exists on the page
        if "Online" in driver.page_source:
            username = "Username: " + user["username"] + "\nURL: " + user["url"] + " Online"
            usernames.append(username)

    #send mail
    if usernames:
        #send mail
        import yagmail

        email= 'mail'
        contraseña='pass'
        yag = yagmail.SMTP(user=email,password=contraseña)

        # Definir variables
        destinatario= "mail@gmail.com"
        asunto= 'Profesor online'
        mensaje= usernames

        yag.send(destinatario, asunto, mensaje)


    # close the browser
    driver.quit()

Thanks!

You're quitting the driver at the end of your while loop, so when it gets back the the start of the loop, you're trying to use a closed driver.

Thank you for your response, I removed the last line and still got same error:

5:11 ~/online_users $ python3.10 /home/keysoryu/online_users/online_cambly.py
Traceback (most recent call last):
  File "/home/keysoryu/online_users/online_cambly.py", line 20, in <module>
    driver = uc.Chrome()
  File "/home/keysoryu/.local/lib/python3.10/site-packages/undetected_chromedriver/__init__.py", line 431, in __init__
    super(Chrome, self).__init__(
  File "/home/keysoryu/.local/lib/python3.10/site-packages/selenium/webdriver/chrome/webdriver.py", line 70, in __init__
    super(WebDriver, self).__init__(DesiredCapabilities.CHROME['browserName'], "goog",
  File "/home/keysoryu/.local/lib/python3.10/site-packages/selenium/webdriver/chromium/webdriver.py", line 93, in __init__
    RemoteWebDriver.__init__(
  File "/home/keysoryu/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 269, in __init__
    self.start_session(capabilities, browser_profile)
  File "/home/keysoryu/.local/lib/python3.10/site-packages/undetected_chromedriver/__init__.py", line 694, in start_session
    super(selenium.webdriver.chrome.webdriver.WebDriver, self).start_session(
  File "/home/keysoryu/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 360, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/home/keysoryu/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 425, in execute
    self.error_handler.check_response(response)
  File "/home/keysoryu/.local/lib/python3.10/site-packages/selenium/webdriver/remote/errorhandler.py", line 247, 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:40281
from chrome not reachable
Stacktrace:
#0 0x55aa72050303 <unknown>
#1 0x55aa71e24bbd <unknown>
#2 0x55aa71e135ab <unknown>
#3 0x55aa71e513c3 <unknown>
#4 0x55aa71e48ae9 <unknown>
#5 0x55aa71e8a4a6 <unknown>
#6 0x55aa71e81753 <unknown>
#7 0x55aa71e54a14 <unknown>

I see you're trying to use undetected_chromedriver. Since that appears to try to replace chromedriver, that's unlikely to work on PythonAnywhere.