0
import undetected_chromedriver as uc
driver = uc.Chrome()

The undetected Chromedriver isnt working after google chrome update. I cannnot use normal chromedriver as some block access Kindly provide some solution , is it related the the chrome update , what to do now ?

See the following Error -

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Users\imdec\AppData\Local\Programs\Python\Python310\lib\multiprocessing\spawn.py", line 116, in spawn_main
    exitcode = _main(fd, parent_sentinel)
  File "C:\Users\imdec\AppData\Local\Programs\Python\Python310\lib\multiprocessing\spawn.py", line 125, in _main
    prepare(preparation_data)
  File "C:\Users\imdec\AppData\Local\Programs\Python\Python310\lib\multiprocessing\spawn.py", line 236, in prepare
    _fixup_main_from_path(data['init_main_from_path'])
  File "C:\Users\imdec\AppData\Local\Programs\Python\Python310\lib\multiprocessing\spawn.py", line 287, in _fixup_main_from_path
    main_content = runpy.run_path(main_path,
  File "C:\Users\imdec\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 269, in run_path
    return _run_module_code(code, init_globals, run_name,
  File "C:\Users\imdec\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 96, in _run_module_code
    _run_code(code, mod_globals, init_globals,
  File "C:\Users\imdec\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "c:\Users\imdec\Desktop\script.py", line 12, in <module>
    driver = uc.Chrome()
  File "C:\Users\imdec\AppData\Local\Programs\Python\Python310\lib\site-packages\undetected_chromedriver\__init__.py", line 356, in __init__
    self.browser_pid = start_detached(
  File "C:\Users\imdec\AppData\Local\Programs\Python\Python310\lib\site-packages\undetected_chromedriver\dprocess.py", line 35, in start_detached
    ).start()
  File "C:\Users\imdec\AppData\Local\Programs\Python\Python310\lib\multiprocessing\process.py", line 121, in start
    self._popen = self._Popen(self)
  File "C:\Users\imdec\AppData\Local\Programs\Python\Python310\lib\multiprocessing\context.py", line 224, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
  File "C:\Users\imdec\AppData\Local\Programs\Python\Python310\lib\multiprocessing\context.py", line 327, in _Popen
    return Popen(process_obj)
  File "C:\Users\imdec\AppData\Local\Programs\Python\Python310\lib\multiprocessing\popen_spawn_win32.py", line 45, in __init__
    prep_data = spawn.get_preparation_data(process_obj._name)
  File "C:\Users\imdec\AppData\Local\Programs\Python\Python310\lib\multiprocessing\spawn.py", line 154, in get_preparation_data
    _check_not_importing_main()
  File "C:\Users\imdec\AppData\Local\Programs\Python\Python310\lib\multiprocessing\spawn.py", line 134, in _check_not_importing_main
    raise RuntimeError('''
RuntimeError:
        An attempt has been made to start a new process before the
        current process has finished its bootstrapping phase.

        This probably means that you are not using fork to start your
        child processes and you have forgotten to use the proper idiom
        in the main module:

            if __name__ == '__main__':
                freeze_support()
                ...

        The "freeze_support()" line can be omitted if the program
        is not going to be frozen to produce an executable.

2 Answers2

5

"why is undetected Chromedriver not working?"

Because it is trying to create child processes, and your script is not multiprocessing-safe. This may be the fault of the author of the library you're using for not mentioning it in the documentation. When a child process starts, it must import the main script, and if your main script then tries to create another child process (by calling uc.Chrome again for example), you end up with an infinite recursion. Python prevents this infinite recursion by throwing an error, which actually describes quite exactly what the solution is to this problem: protect any multiprocessing calls in your main script from execution on import by using the special __name__ variable which is set to "__main__" only in the original instance, and will be set to "__mp_main__" in child processes.

import undetected_chromedriver as uc
if __name__ == "__main__":
    driver = uc.Chrome()
Aaron
  • 10,133
  • 1
  • 24
  • 40
1

There is nothing wrong with your code, but you just need to supply this use_subprocess=True argument in uc.Chrome() see example below:

import undetected_chromedriver as uc
from selenium.webdriver.common.by import By

opts = uc.ChromeOptions()
opts.add_argument("--window-size=1020,900")  

driver = uc.Chrome(options=opts, use_subprocess=True)

driver.get('https://gmail.com')
email_field = driver.find_element(By.ID, "identifierId")
email_field.clear()

It works this way in the new version and old version also

Res ham
  • 41
  • 3