Python使用undetected_chromedriver后程序异常控制台无输出
问题现象
项目中引入undetected_chromedriver库替换原生selenium驱动后,程序启动即停止运行,控制台无任何报错输出,替换前其余业务逻辑可正常运行。
复现代码:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from selenium import webdriver import undetected_chromedriver as uc options = webdriver.ChromeOptions() options.add_argument("start-maximized") service = Service(executable_path="path") driver = uc.Chrome(options=options, service=service) driver.get("link")
故障原因
- 模块重复导入:代码中两次重复导入
selenium.webdriver,且混用原生selenium的ChromeOptions、Service实例初始化uc驱动,对象结构不兼容会导致初始化阶段静默阻塞,不会抛出常规异常。 - 驱动匹配逻辑冲突:
undetected_chromedriver自带驱动版本自动匹配、反检测补丁注入逻辑,手动传入指向原生chromedriver的Service路径时,补丁无法正常注入,进程会直接卡在启动阶段无任何输出。 - 参数传递异常:直接将原生selenium生成的options对象传入uc构造方法时,会覆盖uc默认需要注入的反检测启动参数,导致浏览器进程启动后挂起。
修复方案
- 清理冗余导入,不要混用原生selenium的配置对象初始化uc驱动,优先使用uc自带的配置类:
import undetected_chromedriver as uc # 使用uc提供的ChromeOptions生成配置 options = uc.ChromeOptions() options.add_argument("--start-maximized") # 无需手动传入原生selenium的Service对象,uc会自动匹配与本地Chrome版本一致的驱动 # 若自动匹配失败,可通过version_main参数指定本地Chrome的大版本号,比如120 driver = uc.Chrome( options=options, version_main=None ) driver.get("目标访问链接") # 原有后续业务逻辑无需修改,可直接运行
- 特殊场景需要手动指定驱动路径时,必须传入对应版本的
undetected_chromedriver驱动路径,不能使用原生selenium的chromedriver路径。 - 运行前先清理后台残留的chrome、chromedriver进程,避免端口占用导致的静默阻塞。
内容的提问来源于stack exchange,提问作者KraKoff_
相关产品推荐
相关产品推荐

