Managing Firefox Add-ons with Selenium in Python

What will you learn?

In this tutorial, you will discover how to effectively manage Firefox add-ons using Selenium in Python. This guide is essential for automated testing scenarios that require specific browser configurations.

Introduction to Problem and Solution

When engaging in web automation or testing tasks, there are instances where launching Firefox with certain add-ons enabled becomes necessary. This could involve functionalities like ad-blocking, security features, or custom extensions. The challenge arises in controlling these add-ons programmatically post-launching a Firefox session via Selenium WebDriver.

To address this issue, we will utilize the capabilities of webdriver.FirefoxProfile() and webdriver.FirefoxOptions() classes within Selenium’s Python bindings. These tools empower us to tweak browser settings, including installed extensions, granting us complete authority over the browser environment for our automated tests. We’ll walk through setting up a basic Selenium script that initializes Firefox with specified add-ons enabled.


from selenium import webdriver

def setup_firefox_with_addons(addon_paths):
    profile = webdriver.FirefoxProfile()

    # Install each addon from the provided list of paths
    for addon_path in addon_paths:

    # Set preferences if needed (optional)
    # profile.set_preference('', value)

    options = webdriver.FirefoxOptions()

    # Use the modified profile when initializing driver
    driver = webdriver.Firefox(firefox_profile=profile, options=options)

    return driver

# List your addon file paths here
addons = ['/path/to/extension1.xpi', '/path/to/extension2.xpi']

driver = setup_firefox_with_addons(addons)

# Your code that interacts with WebDriver goes here

# Don't forget to quit the driver session afterwards!

# Copyright PHD


In this solution:

  • Creating a Profile: A new instance of FirefoxProfile is created as a foundation for our browser session.
  • Adding Extensions: By looping through each path in addon_paths and installing them into our profile using add_extension().
  • Setting Preferences (Optional): Utilize profile.set_preference() if specific preferences need adjustment.
  • Applying Options: While not extensively used here, FirefoxOptions allows further customization such as headless mode.
  • Launching Browser With Profile: Finally, upon initializing webdriver.Firefox, pass our customized profile (with addons) along with any specified options.

This method ensures that every time your test suite or automation script involving Firefox launches; it does so with your desired set of pre-loaded extensions.

    How can I locate the .xpi file path for my desired add-on?

    To acquire an extension’s .xpi file: visit Mozilla’s official addons website ( and navigate to the addon’s page. Look for a download link; right-click it and select “Save Link As…” to download the .xpi.

    Is it possible to temporarily disable an extension using this approach?

    Certainly! Instead of adding extensions via profiles pre-session; dynamically manage their enabled/disabled states by adjusting preferences within your running session.

    Can I update an existing add-on using Selenium?

    Directly updating an extension mid-session poses challenges due to interactions beyond typical webpage contexts controlled by Selenium. However, simulating updates effectively involves restarting sessions with updated .xpi files.

    How do I remove an installed extension?

    Post-launch removal isn’t directly supported due to profile mechanisms. Consider defining multiple profiles if necessitating varied environments without certain extensions.

    Will these methods function with other browsers like Chrome?

    While focusing on Firefox management here; similar principles apply across browsers like Chrome utilizing respective classes/methods such as ChromeOptions.


    By implementing the steps outlined above – crafting a customizable Firefox profile loaded with desired extensions – you ensure enhanced functionality tailored to project needs and increased flexibility in web automation endeavors. This approach caters precisely to unique operational demands encountered during development and deployment of sophisticated web solutions today.

    Through embracing methodologies detailed herein, you embark on a journey towards learning and growth within the realm of web automation and testing. This knowledge equips you to confidently tackle challenges and innovate within this exciting field alongside a community of practitioners and enthusiasts alike.

    Leave a Comment