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

谷歌浏览器更新后,未检测到的 Chrome 驱动程序无法正常工作。我不能使用普通的 chromedriver 作为一些块访问 请提供一些解决方案,它与 chrome 更新有关,现在该怎么办?

请参阅以下错误 -

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

1 回答 1

0

“为什么未检测到的 Chromedriver 无法正常工作?”

因为它正在尝试创建子进程,并且您的脚本不是多处理安全的。这可能是您使用的库的作者没有在文档中提及它的错。当子进程启动时,它必须import是主脚本,如果您的主脚本随后尝试创建另一个子进程(uc.Chrome例如通过再次调用),您最终会得到无限递归。Python 通过抛出一个错误来防止这种无限递归,这实际上非常准确地描述了这个问题的解决方案:通过使用仅在原始实例中__name__设置为的特殊变量来保护主脚本中的任何多处理调用在导入时不被执行,"__main__"并将"__mp_main__"在子进程中设置。

import undetected_chromedriver as uc
if __name__ == "__main__":
    driver = uc.Chrome()
于 2022-02-07T16:25:22.537 回答