Implementing headless mode in Selenium is straightforward. It involves configuring the specific Options
class for your target browser before initializing the WebDriver instance. Below are practical examples for the most common browsers using Python and Java.
Headless Google Chrome
Chrome's headless mode is mature and widely used. You configure it using the ChromeOptions
class.
Python Example:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
# Setup Chrome options
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--window-size=1920,1080") # Important for responsive design
chrome_options.add_argument("--no-sandbox") # Bypass OS security model, required for many Linux environments
chrome_options.add_argument("--disable-dev-shm-usage") # Overcome limited resource problems
# Initialize driver with options
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
# Your test logic here
driver.get("https://www.google.com")
print(f"Page Title: {driver.title}")
driver.quit()
Java Example:
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import io.github.bonigarcia.wdm.WebDriverManager;
public class HeadlessChromeTest {
public static void main(String[] args) {
WebDriverManager.chromedriver().setup();
// Setup Chrome options
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
options.addArguments("--window-size=1920,1080");
options.addArguments("--no-sandbox");
options.addArguments("--disable-dev-shm-usage");
// Initialize driver with options
WebDriver driver = new ChromeDriver(options);
// Your test logic here
driver.get("https://www.google.com");
System.out.println("Page Title: " + driver.getTitle());
driver.quit();
}
}
Headless Mozilla Firefox
Firefox also provides a robust headless mode, configured via FirefoxOptions
.
Python Example:
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.firefox.service import Service
from webdriver_manager.firefox import GeckoDriverManager
# Setup Firefox options
firefox_options = Options()
firefox_options.add_argument("-headless")
# Initialize driver with options
driver = webdriver.Firefox(service=Service(GeckoDriverManager().install()), options=firefox_options)
# Your test logic here
driver.get("https://www.mozilla.org")
print(f"Page Title: {driver.title}")
driver.quit()
Java Example:
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import io.github.bonigarcia.wdm.WebDriverManager;
public class HeadlessFirefoxTest {
public static void main(String[] args) {
WebDriverManager.firefoxdriver().setup();
// Setup Firefox options
FirefoxOptions options = new FirefoxOptions();
options.addArguments("-headless");
// Initialize driver with options
WebDriver driver = new FirefoxDriver(options);
// Your test logic here
driver.get("https://www.mozilla.org");
System.out.println("Page Title: " + driver.getTitle());
driver.quit();
}
}
Headless Microsoft Edge
Since Edge is now based on Chromium, the process is very similar to Chrome, using EdgeOptions
.
Python Example:
from selenium import webdriver
from selenium.webdriver.edge.options import Options
from selenium.webdriver.edge.service import Service
from webdriver_manager.microsoft import EdgeChromiumDriverManager
# Setup Edge options
edge_options = Options()
edge_options.add_argument("--headless")
edge_options.add_argument("--window-size=1920,1080")
# Initialize driver with options
driver = webdriver.Edge(service=Service(EdgeChromiumDriverManager().install()), options=edge_options)
# Your test logic here
driver.get("https://www.microsoft.com/edge")
print(f"Page Title: {driver.title}")
driver.quit()
It's always recommended to consult the official Selenium documentation for the most up-to-date arguments and capabilities for each browser.