











Firefox is my personal favorite browser, due in part to all of the great extensions available for it. When you try running Firefox with Selenium, however, you’ll probably find that Firefox is missing the extensions you have installed and normally use when browsing. Luckily, there’s a quick and easy way to install all your favorite Firefox extensions when using Selenium.

For example, let’s say we’d like to do a little light web scraping. To keep things simple, let’s just grab what’s trending off of Yahoo’s home page.

You can see the top 10 trending subjects off to the right, starting with Beaufort County.

Selenium without Firefox Extensions

Here’s how we’d normally scrape that info:

from selenium import webdriver geckodriver = 'C:\\Users\\Grayson\\Downloads\\geckodriver.exe' browser = webdriver.Firefox(executable_path=geckodriver) browser.get('http://www.yahoo.com') trending_xpath = '//li[@class="trending-list selected"]/ul/li/a/span' trending = browser.find_elements_by_xpath(trending_xpath) # trending # and subject are separate elements, concatenate like so for i in range(0, 20, 2): print(trending[i].text + trending[i+1].text) browser.quit() 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 from selenium import webdriver geckodriver = 'C:\\Users\\Grayson\\Downloads\\geckodriver.exe' browser = webdriver.Firefox(executable_path=geckodriver) browser.get('http://www.yahoo.com') trending_xpath = '//li[@class="trending-list selected"]/ul/li/a/span' trending = browser.find_elements_by_xpath(trending_xpath) # trending # and subject are separate elements, concatenate like so for i in range(0, 20, 2): print(trending[i].text + trending[i+1].text) browser.quit()

1.Beaufort County 2.Faith Hill 3.Gretchen Carlson 4.Nicki Minaj 5.Taapsee Pannu 6.Cox Cable 7.Scott Disick 8.Airbnb Vacation Rentals 9.Brett Favre 10.Ally Bank 1 2 3 4 5 6 7 8 9 10 1.Beaufort County 2.Faith Hill 3.Gretchen Carlson 4.Nicki Minaj 5.Taapsee Pannu 6.Cox Cable 7.Scott Disick 8.Airbnb Vacation Rentals 9.Brett Favre 10.Ally Bank

Great, that seems to work. But let’s say we’d prefer Firefox to be running with a couple of my favorite extensions, namely:

HTTPS Everywhere: Automatically enables HTTPS encryption on sites that support it, making for more secure browsing.

uBlock Origin: An efficient blocker that can make bloated web pages load much faster.

How do we get these extensions installed on Selenium’s instance of Firefox?

Getting the Necessary Information

First, we’ll need to find where those extensions are stored locally. Note that this means you’ll need to already have them installed on your machine for regular use of Firefox.

To find them, open up Firefox and navigate to the main drop down menu. Go to “Help”, and then “Troubleshooting Information”. Alternatively, you can get to the same place by entering about:support in your Firefox navigation bar.

In the “Application Basics” section click the “Open Directory” button, and in the file browser that pops up open the “extensions” folder. These are the extension installation files we’ll need to reference in our script. There should be a different “.xpi” file for every Firefox extension you have installed, and the file path to this folder should look something like “C:\Users\Grayson\AppData\Roaming\Mozilla\Firefox\Profiles\3rqg4psi.default\extensions”.

It might be difficult to tell which files correspond to which extensions based on the file names, as the file names are sometimes unintelligible. To get around this, go back to your browser and on the same page as before scroll down to the “Extensions” section. Here you’ll find a table that pairs each extension name with its corresponding ID, and the ID should be almost the same as the installation file name, lacking just the “.xpi” suffix.

In our case though, the extension and file names aren’t too hard to match:

HTTPS Everywhere: https-everywhere@eff.org.xpi

uBlock Origin: uBlock0@raymondhill.net.xpi

Selenium with Firefox Extensions

Now we just need to add a few lines of code to our original script to install these extensions. We’ll perform the installations right after we initialize the browser.

Run this script and see if you get the same results as last time. Look for the extension symbols near the top right of the browser. You should see the blue-and-white “S” symbol for HTTPS Everywhere and the reddish badge symbol for uBlock Origin.

from selenium import webdriver geckodriver = 'C:\\Users\\Grayson\\Downloads\\geckodriver.exe' browser = webdriver.Firefox(executable_path=geckodriver) extension_dir = 'C:\\Users\\Grayson\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\3rqg4psi.default\\extensions\\' # remember to include .xpi at the end of your file names extensions = [ 'https-everywhere@eff.org.xpi', 'uBlock0@raymondhill.net.xpi', ] for extension in extensions: browser.install_addon(extension_dir + extension, temporary=True) browser.get('http://www.yahoo.com') trending_xpath = '//li[@class="trending-list selected"]/ul/li/a/span' trending = browser.find_elements_by_xpath(trending_xpath) for i in range(0, 20, 2): print(trending[i].text + trending[i+1].text) browser.quit() 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 from selenium import webdriver geckodriver = 'C:\\Users\\Grayson\\Downloads\\geckodriver.exe' browser = webdriver.Firefox(executable_path=geckodriver) extension_dir = 'C:\\Users\\Grayson\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\3rqg4psi.default\\extensions\\' # remember to include .xpi at the end of your file names extensions = [ 'https-everywhere@eff.org.xpi', 'uBlock0@raymondhill.net.xpi', ] for extension in extensions: browser.install_addon(extension_dir + extension, temporary=True) browser.get('http://www.yahoo.com') trending_xpath = '//li[@class="trending-list selected"]/ul/li/a/span' trending = browser.find_elements_by_xpath(trending_xpath) for i in range(0, 20, 2): print(trending[i].text + trending[i+1].text) browser.quit()

1.Beaufort County 2.Faith Hill 3.Gretchen Carlson 4.Nicki Minaj 5.Taapsee Pannu 6.Cox Cable 7.Scott Disick 8.Airbnb Vacation Rentals 9.Brett Favre 10.Ally Bank 1 2 3 4 5 6 7 8 9 10 1.Beaufort County 2.Faith Hill 3.Gretchen Carlson 4.Nicki Minaj 5.Taapsee Pannu 6.Cox Cable 7.Scott Disick 8.Airbnb Vacation Rentals 9.Brett Favre 10.Ally Bank

So there you have it. We performed the same operation, but got to take our two favorite Firefox extensions along for the ride.

In addition to the peace of mind knowing that HTTPS security was used whenever possible, you may have noticed that our second script took significantly less time to load the page. This is because uBlock Origin blocked a number of unnecessary, resource-intensive requests, a great feature to have when you’re dealing with the slow, bloated web pages that are all too common nowadays.

Anyways, I hope this gives you a few ideas as to how you can make your life a little more convenient. Let me know if you have any questions, and happy automating.