Python调用undetected_chromedriver整文件运行卡住问题求助
Spyder整文件运行undetected_chromedriver卡在初始化步骤的解决方法
问题复现
在Anaconda搭建的Python环境中使用undetected_chromedriver.v2包,测试代码如下:
import undetected_chromedriver.v2 as uc ucoptions = uc.ChromeOptions() print('1') ucoptions.add_argument('--no-first-run') print('2') driver = uc.Chrome(chrome_options = ucoptions) print('3')
运行时存在两种截然不同的表现:
- 按F9逐行执行代码:运行状态正常,可正常拉起Chrome浏览器,控制台完整打印1、2、3
- 按F5运行整个代码文件:程序始终卡在
driver = uc.Chrome(chrome_options = ucoptions)这一行,控制台仅能打印输出1和2,后续逻辑完全不执行
根本原因
问题本质是Spyder默认使用的IPython交互运行环境,和undetected_chromedriver的多进程启动逻辑存在冲突:
- F9逐行执行时,代码直接在当前已启动的交互解释器进程内顺序执行,驱动拉起Chrome的子进程逻辑不会触发进程嵌套死锁
- F5整文件运行时,IPython默认在独立用户命名空间下做进程fork,
undetected_chromedriver初始化时的补丁注入、驱动拉起流程会和IPython的全局运行锁产生冲突,直接卡死在驱动实例化步骤。
可行解决方案
按以下顺序尝试,绝大多数场景下前两种方案即可解决问题:
- 调整Spyder运行配置
打开Spyder顶部菜单栏Tools > Preferences > Run,勾选Execute in a new dedicated Python interpreter,保存设置后重启Spyder。整文件运行时会直接启动独立的原生Python进程执行代码,完全脱离IPython交互环境,从根源规避多进程冲突。 - 代码侧调整启动参数
如果需要保留IPython交互运行能力,初始化驱动时增加兼容参数,同时关闭子进程启动模式即可,修改后的可运行代码如下:import undetected_chromedriver.v2 as uc ucoptions = uc.ChromeOptions() ucoptions.add_argument('--no-first-run') ucoptions.add_argument('--no-sandbox') ucoptions.add_argument('--disable-dev-shm-usage') # 关闭子进程启动逻辑,适配IPython交互环境 driver = uc.Chrome(chrome_options=ucoptions, use_subprocess=False) - 版本对齐修复
如果上述方案无效,先执行命令升级undetected_chromedriver到最新版本,同时确认本地安装的Chrome浏览器大版本号和驱动支持的版本完全一致,版本不匹配也可能导致驱动初始化时无响应:pip install --upgrade undetected-chromedriver
内容的提问来源于stack exchange,提问作者Vincent
相关产品推荐
相关产品推荐

