Search code examples
pythonseleniumheadlessgoogle-chrome-headlessfirefox-headless

Handling headless mode in different browsers using Selenium Python client


I am currently working on a python (3.7) CLI program that uses Selenium and will be used by a diverse group of people.

The problem I ran into was the following:

For setting options like "headless" in Chrome I use

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--headless")
driver = webdriver.Chrome(executable_path,options=chrome_options)

For Firefox, the code looks like this:

from selenium import webdriver
from selenium.webdriver.firefox.options import Options

options = Options()
options.headless = True
driver = webdriver.Firefox(executable_path,options=options)

So I wanted to know if there is a way to normalise these settings/ handle different browsers elegantly or do I have to write everything basically 2 or even 3 (might add Safari or Opera) times?


Solution

  • As per the Change Log of Selenium Python client v3.12.0:

    • Deprecate Options set_headless methods in favor of property setter

    Hence, if you are using Selenium WebDriver v 3.12.0 or above, instead of chrome_options.add_argument("--headless") you need to use the headless property setter as follows:

    options.headless = True
    

    Else you may see a DeprecationWarning as follows:

    DeprecationWarning: use setter for headless property instead of set_headless opts.set_headless(headless=True)
    

    You can find a relevant detailed discussion in DeprecationWarning: use setter for headless property instead of set_headless opts.set_headless(headless=True) using Geckodriver and Selenium in Python


    References

    A couple of relevant discussions: