Headless Chrome加载扩展触发WebDriverException报错,求解决方案
解决Selenium Chrome无头模式加载扩展触发WebDriverException的问题
问题核心
你在无头模式下加载代理扩展时,Chrome无法找到扩展的后台页面,导致抛出WebDriverException——这是旧版无头模式对扩展支持不完善导致的典型问题,正常模式与无头模式的扩展加载逻辑存在差异。
可行解决方案
- 切换为新版无头模式参数
Chrome 112及以上版本推出的--headless=new参数,完全复刻正常浏览器的行为,对扩展的兼容性远优于旧版--headless。直接替换参数即可:
def new_driver(): options = Options() options.add_extension("proxy.zip") # 替换为新版无头参数 options.add_argument("--headless=new") options.add_experimental_option("excludeSwitches", ["enable-logging"]) options.add_argument('--disable-gpu') options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') driver = webdriver.Chrome(options=options) return driver
- 解压扩展后加载文件夹
加载zip格式的扩展在无头模式下偶尔会出现解析异常,把proxy.zip解压到本地文件夹,直接指向文件夹路径加载:
# 替换成你解压后的扩展文件夹路径 options.add_extension("./proxy_extension")
- 添加扩展加载等待逻辑
如果新版无头模式仍报错,给扩展后台页面留足加载时间,用显式等待确认扩展初始化完成:
from selenium.webdriver.support.ui import WebDriverWait def new_driver(): options = Options() options.add_extension("proxy.zip") options.add_argument("--headless=new") options.add_experimental_option("excludeSwitches", ["enable-logging"]) options.add_argument('--disable-gpu') options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') driver = webdriver.Chrome(options=options) # 等待扩展完成初始化,超时10秒 WebDriverWait(driver, 10).until( lambda d: d.execute_script("return chrome.runtime && chrome.runtime.id === 'lgknfaobibciggbigdkldiecibigdfgm'") ) return driver
- 弃用扩展,直接使用Chrome代理参数
如果不需要代理扩展的额外功能,直接用Chrome原生代理参数替代扩展,避免扩展加载问题:
# 替换成你的代理地址和端口 options.add_argument('--proxy-server=http://127.0.0.1:8080')
内容的提问来源于stack exchange,提问作者idk idk
相关产品推荐
相关产品推荐

