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

Selenium为Firefox配置文件安装扩展 手动打开时扩展未留存

问题原因

扩展在WebDriver退出后消失的核心原因有两个:

  1. 代码中调用driver.install_addon()时传入了temporary=True参数,该模式下加载的扩展仅在当前Firefox会话内生效,浏览器进程关闭后会被自动清除,不会写入配置文件存储
  2. 旧版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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:45:34