Selenium为Firefox配置文件安装扩展 手动打开时扩展未留存
问题原因
扩展在WebDriver退出后消失的核心原因有两个:
- 代码中调用
driver.install_addon()时传入了temporary=True参数,该模式下加载的扩展仅在当前Firefox会话内生效,浏览器进程关闭后会被自动清除,不会写入配置文件存储 - 旧版Selenium的
webdriver.FirefoxProfile()在加载本地配置时,会先将原配置文件复制到系统临时目录生成副本,WebDriver所有操作都在这个临时副本上执行,哪怕永久安装扩展,修改的也是临时目录下的副本,driver.quit()时临时目录会被自动清理,原路径下的配置文件不会有任何改动
解决方法
方法1:调整安装参数+使用正确的配置加载方式(Selenium 4+ 推荐)
高版本Selenium已经废弃了旧的FirefoxProfile类的部分逻辑,改用FirefoxOptions直接加载原配置文件,同时关闭临时安装模式即可实现扩展持久化:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.firefox.options import Options import time try: # 替换为你自己的Firefox配置文件绝对路径 profile_path = "My_profile_PATH" # 替换为你自己的扩展xpi文件绝对路径 extension_path = "MY_extension_PATH" options = Options() # 直接加载指定路径的原生配置文件,不生成临时副本 options.add_argument("-profile") options.add_argument(profile_path) driver = webdriver.Firefox(options=options) # 第二个参数设为False,执行永久安装而非临时加载 driver.install_addon(extension_path, temporary=False) # 验证安装 driver.get("about:support") addons_block = driver.find_element(By.XPATH,'//*[contains(text(),"Add-ons") and not(contains(text(),"with"))]') driver.execute_script("arguments[0].scrollIntoView();", addons_block) print("扩展安装完成,退出后将保留在配置文件中") time.sleep(20) except Exception as e: print(e) finally: driver.quit()
方法2:手动预置扩展到配置文件
如果不想通过脚本安装,也可以提前手动打开对应配置文件的Firefox实例安装好扩展,后续Selenium加载该配置时会直接读取已安装的扩展列表,不需要重复执行安装逻辑。
注意事项
- 运行脚本前必须关闭所有正在使用该配置文件的Firefox进程,否则会触发配置文件锁,Selenium会自动创建临时配置运行,所有修改都不会同步到原配置
- 检查配置文件目录的写入权限,权限不足时Firefox无法将扩展文件写入配置目录下的
extensions子文件夹,会导致安装失败或自动回退为临时加载模式
内容的提问来源于stack exchange,提问作者duy dang
相关产品推荐
相关产品推荐

