You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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默认需要注入的反检测启动参数,导致浏览器进程启动后挂起。
修复方案
  1. 清理冗余导入,不要混用原生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("目标访问链接")

# 原有后续业务逻辑无需修改,可直接运行
  1. 特殊场景需要手动指定驱动路径时,必须传入对应版本的undetected_chromedriver驱动路径,不能使用原生selenium的chromedriver路径。
  2. 运行前先清理后台残留的chrome、chromedriver进程,避免端口占用导致的静默阻塞。

内容的提问来源于stack exchange,提问作者KraKoff_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 15:18:15